【问题标题】:Spring Security 3- How to customize username/password parameters?Spring Security 3-如何自定义用户名/密码参数?
【发布时间】:2011-01-29 20:26:07
【问题描述】:

使用<http ... />Spring Security 3命名空间时如何自定义UsernamePasswordAuthenticationFilter usernameParameter(j_username)和passwordParameter(j_password)属性?据我了解,<http ... /> 创建了过滤器,但我不知道如何自定义它。

【问题讨论】:

标签: java spring spring-security


【解决方案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中所述

    【讨论】:

    • 我几乎所有的配置都在使用 命名空间,所以我不想放弃使用它。我希望有一些干净的方式来配置它,并且仍然使用 配置。
    • 您可以在spring JIRA中报告错误以添加所需的配置。
    • 听起来这就是我需要做的。我将提交功能请求。
    • @Taylor:有一些解决方法可以配置&lt;http ... /&gt; 配置中缺少的功能 - 您可以声明 BeanPostProcessor 以将自定义配置应用于正在创建的 bean。
    • 谢谢。根据您的建议发布解决方案。
    猜你喜欢
    • 2014-04-10
    • 2012-03-02
    • 2017-12-25
    • 1970-01-01
    • 2012-06-19
    • 2015-08-24
    • 2012-09-12
    • 2011-12-12
    相关资源
    最近更新 更多