2012-04-03 12 views
2

konnte ich Frühling Sicherheit alles bekommen, mit dem folgenden arbeiten:Umleitung nach j_spring_security_check

<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"/> 

Meine Frage für die Klasse MyAuthenticationSuccessHandler ist, nachdem er authentifiziert, es bleibt nur als eine leere weiße Seite. Ich kann mit der context.redirect() auf die Standard-Homepage umleiten, aber gibt es eine Möglichkeit, automatisch zur Standard-Homepage zu wechseln? Ich habe es sogar im Frühling xml aufgeführt.

Antwort

6

Einer der Gründe, warum dies möglicherweise nicht ist, weil Ihre com.myapp.security.MyAuthenticationSuccessHandler nicht org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler erstreckt oder anderen Authentifizierungs-Handler, der intern Umleitungen auf #onAuthenticationSuccess.

Sie können es ohne manuelle Umleitung zur Arbeit bringen, indem Sie Ihren Dienst erweitern, der es für Sie erledigt. Zum Beispiel ...

@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); 
    } 
} 
+0

Sir Sie haben meinen Tag gerettet, danke. Ich denke, das sollte als die richtige Antwort markiert werden. – Gabber

3

Versuchen Sie, die default-target-url Attribut zu entfernen und fügen Sie den folgenden:

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

Spring Security Dokumentation sagt, dass, wenn eine benutzerdefinierte Authentifizierungserfolgsflag Handler verwendet wird, dann müssen Sie das Attribut entfernen und das Ziel in Ihrem Handler gesetzt.

+0

Das hat nicht funktioniert. Aber ich konnte es nur mit Redirect zur Arbeit bringen. Ich gebe im Grunde die URL ein, die ich von der Bohne verwenden möchte. – KVISH

Verwandte Themen