2012-03-12 77 views
11

我已经在我的应用程序中实现弹簧的安全,我的弹簧security.xml文件有以下形式登录标记后默认目标网址。春季安全不打成功authtication

<form-login login-page="/login.htm" default-target-url="/dashboard.htm" 
      authentication-failure-url="/login.htm?error=true" 
      authentication-success-handler-ref="authenticationSuccessHandler" /> 

我想从/login.htm登录,成功验证后我希望用户点击dashboard.htm。 Everythig工作正常,除了成功的身份验证后,它不会击中/dashboard.htm,但命中上下文......但如果我手动在url中键入dashboard.htm然后一切工作正常...是的..我有执行authticationSuccessHandler。

+0

试图激活调试LEVE春季安全,看看到底是怎么回事之一。你在使用其他过滤器吗?作为urlrewrite? – jddsantaella 2012-03-12 22:35:21

+1

我不是Spring Security的专家,但为什么你同时拥有default-target-url和authentication-success-handler?你可以删除默认目标网址,做在成功处理程序重定向 – Blitzkr1eg 2012-03-13 07:43:14

+3

Blitzkr1eg是正确的,你不应该有两种认证成功处理程序-ref和缺省目标URL。从authentication-success-handler-ref描述:“应该用于处理成功的认证请求的AuthenticationSuccessHandler bean的引用。**不应该与default-target-url(或者always-use-default -target-URL)作为 实施应始终与导航处理的后续目的地**” – Dani 2012-03-13 15:05:47

回答

14

尝试取出default-target-url属性,并添加以下内容:

<b:bean id="authenticationSuccessHandler" class="com.example.CustomSimpleURLAuthenticationSuccessHandler"> 
    <b:property name="defaultTargetUrl" value="/dashboard.htm"/> 
</b:bean> 
+0

感谢瓦西雷斯......这个工作对我来说.. – Ashish 2012-03-15 10:19:04

+0

@vasilakis将始终重定向到目标URL是默认还是没有? – 2012-10-06 16:08:53

8
<beans:bean id="loginSuccessHandler" class="com.example.LoginSuccessHandler"> 
    <beans:property name="defaultTargetUrl" value="/security/success"/> 
    <beans:property name="alwaysUseDefaultTargetUrl" value="true"/> 
</beans:bean> 

public class LoginSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler { 

    @Override 
    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, 
            Authentication authentication) throws ServletException, IOException { 
     request.getSession().setMaxInactiveInterval(60 * 60); //one hour 
     System.out.println("Session set up for 60min"); 
     super.onAuthenticationSuccess(request, response, authentication); 
     } 
} 
+1

谢谢!这一个为我工作:) – 2014-02-09 10:05:39

+0

一个很好的答案! – Omid 2017-01-02 22:28:52

+0

对于任何使用纯Java配置的人,您可以在构造函数中设置公共属性LoginSuccessHandler(){super(); setAlwaysUseDefaultTargetUrl(true); setDefaultTargetUrl(“/ security/success”); } – ryanp102694 2017-02-18 15:30:08

0

正如你可以在图片中看到,有某种坏的设计(IMO它总是重定向到default-target-url)。 当你去到登录表单,从被禁止的资源,将您重定向到URL并不会直通the default-target-url

http://i.stack.imgur.com/fj9ou.png