Spring Security - Как добавить пользовательский параметр кроме имени пользователя / пароля в UsernamePasswordAuthenticationFilter - PullRequest
0 голосов
/ 10 февраля 2012

Я использую Spring 3 в своем приложении и сталкиваюсь с одной проблемой.Я настроил защиту Spring следующим образом в моем xml-файле:

<bean id="authenticationFilter"     class="org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter"
        p:authenticationManager-ref="myAuthenticationManager"
        p:authenticationFailureHandler-ref="customAuthenticationFailureHandler"
        p:authenticationSuccessHandler-ref="customAuthenticationSuccessHandler"
        p:sessionAuthenticationStrategy-ref="sas" p:usernameParameter="username"
        p:passwordParameter="password" **p:customparameter="mycustomparameter"** p:filterProcessesUrl="/validate_user.jspx"
        p:postOnly="true" />

Но после инициализации контекста Spring я получаю исключение, что mycustomparameter не имеет никакого метода получения / установки и не найден, и так далее..

Так что мне нужно передать мой пользовательский параметр в мой пользовательский класс authenticatemanager (где я получаю uname и pwd в объекте аутентификации). (Я могу получить эту дополнительную информацию в authentication.getDetails()) Также у меня есть это полена моей странице login.jsp вроде -

<s:hidden label="Password" id="login_form_mycustomparameter" name="mycustomparameter"
value="false" cssClass="txtbox" required="true" />

Возможно ли это?Если нет, пожалуйста, предложите альтернативный способ достижения этого?

Спасибо ..

1 Ответ

0 голосов
/ 10 февраля 2012

Пользовательский параметр пытается вызвать UsernamePasswordAuthenticationFilter.setCustomparameter, который не существует.Поэтому вам нужно создать собственный фильтр, который расширяет UsernamePasswordAuthenticationFilter и предоставляет метод setCustomparameter.Пользовательский фильтр, который вы создадите, должен будет создать пользовательский объект аутентификации, содержащий этот пользовательский параметр.Наконец, вам понадобится пользовательский AuthenticationProvider, который затем использует пользовательский параметр при аутентификации пользователя.

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