2012-03-12 42 views
11

Tôi đã triển khai bảo mật mùa xuân trong ứng dụng của mình, spring-security.xml của tôi đã theo thẻ đăng nhập biểu mẫu.Bảo mật mùa xuân không nhấn mặc định-target-url sau khi xác thực thành công

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

Tôi muốn đăng nhập từ /login.htm và sau khi xác thực thành công, tôi muốn người dùng nhấn dashboard.htm. Everythig đang làm việc tốt ngoại trừ một thực tế là sau khi authetication thành công nó không nhấn /dashboard.htm nhưng chạm vào bối cảnh .. nhưng nếu tôi gõ dashboard.htm trong url sau đó tất cả mọi thứ hoạt động tốt ... Vâng .. Tôi có thực hiện authticationSuccessHandler.

+0

Đang cố gắng để kích hoạt debug leve cho an ninh mùa xuân và xem những gì đang xảy ra một. Bạn đang sử dụng các bộ lọc khác? Như urlrewrite? – jddsantaella

+1

Tôi không có chuyên gia về Bảo mật mùa xuân nhưng tại sao bạn có cả url mặc định-target-url và trình xử lý xác thực thành công? Bạn có thể xóa url mặc định-target-url và thực hiện chuyển hướng trong trình xử lý thành công – Blitzkr1eg

+3

Blitzkr1eg là đúng, bạn không nên có cả xác thực-thành công-handler-ref và default-target-url. Từ mô tả xác thực-thành công-handler-ref: "Tham chiếu đến một bean AuthenticationSuccessHandler sẽ được sử dụng để xử lý yêu cầu xác thực thành công. ** Không được sử dụng kết hợp với default-target-url (hoặc luôn sử dụng-mặc định -arget-url) như việc triển khai luôn phải xử lý điều hướng đến đích tiếp theo ** " – Dani

Trả lời

14

Hãy thử loại bỏ các thuộc tính default-target-url và thêm dòng sau:

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

Cảm ơn Vasileios ... điều này đã làm việc cho tôi .. – Ashish

+0

@vasilakis sẽ luôn chuyển hướng đến url mục tiêu là mặc định hay không? –

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

Cảm ơn! Điều này làm việc cho tôi :) –

+0

Một câu trả lời tuyệt vời! – Omid

+0

Đối với bất kỳ ai sử dụng cấu hình thuần Java, bạn có thể thiết lập các thuộc tính trong công thức Constuctor LoginSuccessHandler() {super(); setAlwaysUseDefaultTargetUrl (true); setDefaultTargetUrl ("/ security/success"); } – ryanp102694

6

tôi sử dụng gợi ý này từ câu hỏi spring is not redirecting to default target url?. Tôi đã thử nó và nó đang hoạt động.

<form-login login-page="/login.htm" 
default-target-url="/dashboard.htm" 
always-use-default-target="true"/> 
0

Như bạn có thể thấy trong hình, có một số kiểu thiết kế xấu (IMO Nó luôn chuyển hướng đến default-target-url). Khi bạn đi đến biểu mẫu đăng nhập từ một nguồn lực bị cấm, nó sẽ chuyển hướng bạn đến URL đó và không đi qua the default-target-url

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

Các vấn đề liên quan