Java Spring Security 3-如何自定义用户名/密码参数?

Java Spring Security 3-如何自定义用户名/密码参数?,java,spring,spring-security,Java,Spring,Spring Security,在使用Spring Security 3命名空间时,如何自定义UsernamePasswordAuthenticationFilter usernameParameter(j_用户名)和passwordParameter(j_密码)属性?据我所知,创建了过滤器,但我不知道如何自定义它。过滤器是使用元素配置的,但该元素不提供为用户名和密码设置自定义名称的功能 您可以直接配置,如中所述。以下是我根据axtavt的建议创建的解决方案: 弹簧配置: <beans:bean id="userPass

在使用
Spring Security 3命名空间时,如何自定义UsernamePasswordAuthenticationFilter usernameParameter(j_用户名)和passwordParameter(j_密码)属性?据我所知,
创建了过滤器,但我不知道如何自定义它。

过滤器是使用元素配置的,但该元素不提供为用户名和密码设置自定义名称的功能


您可以直接配置,如

中所述。以下是我根据axtavt的建议创建的解决方案:

弹簧配置:

<beans:bean id="userPassAuthFilterBeanPostProcessor"
    class="com.my.package.UserPassAuthFilterBeanPostProcessor">
    <beans:property name="usernameParameter" value="username" />
    <beans:property name="passwordParameter" value="password" />
</beans:bean>

我几乎在所有配置中都使用了名称空间,所以我不想放弃使用它。我希望有一些干净的方法来配置它,并且仍然使用配置。你可以在spring JIRA中报告bug以添加所需的配置。听起来这就是我需要做的。我将提交一个功能请求。@Taylor:对于配置
配置中缺少的功能,有一个小的解决方法-您可以声明一个
BeanPostProcessor
来对正在创建的bean应用自定义配置。谢谢。根据您的建议发布了解决方案。我为此提交了功能请求:
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;
    }

}