перенаправление после j_spring_security_check - PullRequest
2 голосов
/ 03 апреля 2012

Мне удалось настроить Spring Security на работу со следующими параметрами:

<http access-denied-page="/start.jsf">
    <intercept-url pattern="/start.jsf" filters="none" />
    <intercept-url pattern="/web/**" access="ROLE_USER" />
    <form-login login-page="/start.jsf" default-target-url="/web/user/homepage.jsf"
            authentication-success-handler-ref="successHandler" always-use-default-target="true"
            authentication-failure-url="/index.jsf?state=failure"/>
    <logout logout-success-url="/index.jsf?state=logout" />
</http>

<beans:bean id="successHandler" class="com.myapp.security.MyAuthenticationSuccessHandler"/>

У меня вопрос к классу MyAuthenticationSuccessHandler, после аутентификации он просто остается пустой белой страницей. Я могу перенаправить на домашнюю страницу по умолчанию с помощью context.redirect (), но есть ли способ автоматически перейти на домашнюю страницу по умолчанию? Я даже перечислил это весной xml.

Ответы [ 2 ]

6 голосов
/ 16 августа 2012

Одна из причин, по которой это может не работать, заключается в том, что ваш com.myapp.security.MyAuthenticationSuccessHandler не расширяет org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler или любой другойдругой обработчик аутентификации, который внутренне перенаправляет на # onAuthenticationSuccess.

Вы можете заставить его работать без ручного перенаправления, если ваша служба расширяет тот, который делает это за вас.Например ...

@Service("authenticationSuccessHandler")
public class WebAuthenticationSuccessHandlerImpl extends SavedRequestAwareAuthenticationSuccessHandler {

    @Override
    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
        //do your work here then call super so it redirects accordingly
        super.onAuthenticationSuccess(request, response, authentication);
    }
}
3 голосов
/ 03 апреля 2012

Попробуйте удалить атрибут default-target-url и добавьте следующее:

<beans:bean id="successHandler" class="com.myapp.security.MyAuthenticationSuccessHandler">
    <beans:property name="defaultTargetUrl" value="/web/user/homepage.jsf"/>
</beans:bean>

В документации по безопасности Spring сказано, что при использовании пользовательского обработчика успешной аутентификации необходимо удалить атрибут и установить цель вваш обработчик.

...