Spring Security 3- Как настроить параметры имени пользователя/пароля?

Как настроить свойства UsernamePasswordAuthenticationFilter usernameParameter (j_username) и passwordParameter (j_password) при использовании пространства имен <http ... /> Spring Security 3? Насколько я понимаю, <http ... /> создает фильтр, но я не понимаю, как его настроить.


person Taylor Leese    schedule 20.03.2010    source источник
comment
Я отправил запрос на эту функцию: jira.springframework.org/browse/SEC-1445   -  person Taylor Leese    schedule 20.03.2010


Ответы (2)


Вот решение, которое я создал на основе предложения 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;
    }

}
person Taylor Leese    schedule 20.03.2010

Фильтр настраивается с помощью form-login, но этот элемент не дает возможности устанавливать пользовательские имена для имени пользователя и пароля.

Вы можете настроить напрямую, как описано в Справочник по Spring

person uthark    schedule 20.03.2010
comment
Я использую пространство имен ‹http ... /› почти во всех своих конфигурациях, поэтому я не хочу от него отказываться. Я надеялся, что есть какой-то чистый способ настроить его и по-прежнему использовать конфигурацию ‹http .. /›. - person Taylor Leese; 20.03.2010
comment
Вы можете сообщить об ошибке весной JIRA, чтобы добавить необходимую конфигурацию. - person uthark; 20.03.2010
comment
Похоже, это то, что мне нужно сделать. Я отправлю запрос функции. - person Taylor Leese; 20.03.2010
comment
@Taylor: есть небольшой обходной путь для настройки функций, отсутствующих в конфигурации <http ... />, — вы можете объявить BeanPostProcessor, чтобы применить пользовательскую конфигурацию к создаваемым компонентам. - person axtavt; 20.03.2010
comment
Спасибо. Опубликовано решение, основанное на вашем предложении. - person Taylor Leese; 21.03.2010
comment
Удачи вам в том, чтобы ребята из SpringSecurity приняли этот запрос. По моему опыту, их обычный ответ — запрашиваемая вами функция слишком специализирована. - person Stephen C; 21.03.2010
comment
На самом деле, они уже выполнили запрос функции. Это будет в 3.1.0. См. jira.springframework.org/browse/SEC-1445. - person Taylor Leese; 20.05.2010