Зачем нужен этот BeanPostProcessor в дополнение к UserDetailsService в этом примере аутентификации Spring 3.0? - PullRequest
0 голосов
/ 09 августа 2010

Я пытаюсь понять приложение Spring 3.0, которое содержит следующую реализацию BeanPostProcessor.Для чего нужен этот код?Я думал, что UserDetailsService достаточно для получения и настройки информации учетной записи пользователя.

@Service
public class UserPassAuthFilterBeanPostProcessor implements BeanPostProcessor
{

    /**
     * The username parameter.
     */
    private String usernameParameter;

    /**
     * The password parameter.
     */
    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;
    }

    /**
     * Sets the username parameter.
     * 
     * @param usernameParameter
     *         the username parameter
     */
    public final void setUsernameParameter(final String usernameParameter)
    {
        this.usernameParameter = usernameParameter;
    }

    /**
     * Gets the username parameter.
     * 
     * @return the username parameter
     */
    public final String getUsernameParameter()
    {
        return usernameParameter;
    }

    /**
     * Sets the password parameter.
     * 
     * @param passwordParameter
     *         the password parameter
     */
    public final void setPasswordParameter(final String passwordParameter)
    {
        this.passwordParameter = passwordParameter;
    }

    /**
     * Gets the password parameter.
     * 
     * @return the password parameter
     */
    public final String getPasswordParameter()
    {
        return passwordParameter;
    }

}

Ответы [ 2 ]

2 голосов
/ 09 августа 2010

Да, UserDetailsService достаточно.

Это BeanPostProcessor изменяет имена параметров имени пользователя и пароля в запросе на вход в систему (т. Е. Имена полей в форме входа в систему) - эти свойства не могут быть настроены с помощью конфигурации пространства имен и с использованием BeanPostProcessors s для настройки таких параметров. свойства - ужасная, но довольно распространенная практика.

1 голос
/ 15 июня 2011

Этот метод postProcessBeforeInitialization() реализован из интерфейса BeanPostProcessor, который автоматически выполняется после завершения выполнения ваших методов получения и установки. и как только метод postProcessBeforeInitialization() завершит выполнение, объекты будут инициализированы, а затем будет выполняться postProcessAfterInitialization().

Это что-то вроде методов жизненного цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...