Spring Security 3-如何自定义用户名/密码参数?
Posted
技术标签:
【中文标题】Spring Security 3-如何自定义用户名/密码参数?【英文标题】:Spring Security 3- How to customize username/password parameters? 【发布时间】:2011-01-29 20:26:07 【问题描述】:使用<http ... />
Spring Security 3命名空间时如何自定义UsernamePasswordAuthenticationFilter usernameParameter(j_username)和passwordParameter(j_password)属性?据我了解,<http ... />
创建了过滤器,但我不知道如何自定义它。
【问题讨论】:
我为此提交了功能请求:jira.springframework.org/browse/SEC-1445 【参考方案1】:这是我根据 axtavt 的建议创建的解决方案:
弹簧配置:
<beans:bean id="userPassAuthFilterBeanPostProcessor"
class="com.my.package.UserPassAuthFilterBeanPostProcessor">
<beans:property name="usernameParameter" value="username" />
<beans:property name="passwordParameter" value="password" />
</beans:bean>
Java 类:
package com.my.package;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.security.web.authentication.
UsernamePasswordAuthenticationFilter;
public class UserPassAuthFilterBeanPostProcessor implements BeanPostProcessor
private String usernameParameter;
private String passwordParameter;
@Override
public final Object postProcessAfterInitialization(final Object bean,
final String beanName)
return bean;
@Override
public final Object postProcessBeforeInitialization(final Object bean,
final String beanName)
if (bean instanceof UsernamePasswordAuthenticationFilter)
final UsernamePasswordAuthenticationFilter filter =
(UsernamePasswordAuthenticationFilter) bean;
filter.setUsernameParameter(getUsernameParameter());
filter.setPasswordParameter(getPasswordParameter());
return bean;
public final void setUsernameParameter(final String usernameParameter)
this.usernameParameter = usernameParameter;
public final String getUsernameParameter()
return usernameParameter;
public final void setPasswordParameter(final String passwordParameter)
this.passwordParameter = passwordParameter;
public final String getPasswordParameter()
return passwordParameter;
【讨论】:
【参考方案2】:过滤器是使用form-login 元素配置的,但该元素不提供为用户名和密码设置自定义名称的功能。
您可以直接配置,如Spring Reference中所述
【讨论】:
我几乎所有的配置都在使用<http ... />
配置中缺少的功能 - 您可以声明 BeanPostProcessor
以将自定义配置应用于正在创建的 bean。
谢谢。根据您的建议发布解决方案。以上是关于Spring Security 3-如何自定义用户名/密码参数?的主要内容,如果未能解决你的问题,请参考以下文章
如何在自定义 Spring security 3.0 身份验证中正确处理异常?
Spring Security 3.0:如何指定应用自定义过滤器的 URL?
使用spring 3 security在jsp页面中访问我的自定义用户对象
Spring Security 3.0 - 自定义基本 http 身份验证对话框