2011-12-06 25 views
7

Tôi đang cố gắng thực hiện điều này: Make spring security add the return to url in the query string for the login page, tức là: nhận được mùa xuân để thông báo cho trang đăng nhập nơi tôi đến. Tôi có một số tích hợp SSO .. vì vậy tôi sẽ gửi url cho họ, hoặc họ sẽ thêm người giới thiệu cho tôi, vì vậy tôi biết rằng người dùng nên đăng nhập và gửi đến /some/url. Đó là tất cả dandy. Vấn đề tôi gặp phải là mở rộng LoginUrlAuthenticationEntryPoint (trừ khi bạn có thể cho tôi biết lý do chính đáng để thực hiện AuthenticationEntryPoint thay thế). Tôi chỉ cần sửa đổi các yêu cầu đối với trang đăng nhập, như vậy:cách mở rộng LoginUrlAuthenticationEntryPoint hoặc cách triển khai AuthenticationEntryPoint

RedirectStrategy redirectStrategy = new DefaultRedirectStrategy(); 

// only append returnto to '/login' urls 
if(request.getServletPath() == "/login") { 
    // indicates we want to return to this page after login 
    redirectStrategy.sendRedirect(request, response, "/login?returnto=" + request.getServletPath()); 
} 

Làm cách nào để tôi có thể yêu cầu các yêu cầu còn lại? Điều này không chính xác (những gì tôi vừa làm):

RequestDispatcher dispatcher = request.getRequestDispatcher("/login"); 

// just forward the request 
dispatcher.forward(request, response); 

vì nó đặt chúng tôi trong vòng chuyển hướng. Tuy nhiên nó có vẻ là what spring does in its version of commence. Tôi bối rối. Tôi phải làm gì với số điện thoại commence trong tiện ích mở rộng tùy chỉnh của mình là LoginUrlAuthenticationEntryPoint?

Trả lời

6

Đã tìm ra. Chỉ cần chuyển tiếp tới trang đăng nhập có phần 'returnto' được thêm vào. Ban đầu tôi thấy khó hiểu vì LoginUrlAuthenticationEntryPoint không có nghĩa là 'điều này chuyển hướng người dùng đến trang đăng nhập' ngay từ cái nhìn đầu tiên. Đây là tất cả những gì cần thiết:

@Override 
public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authenticationException) throws IOException, ServletException { 
    RedirectStrategy redirectStrategy = new DefaultRedirectStrategy(); 

    redirectStrategy.sendRedirect(request, response, "/login?returnto=" + request.getServletPath()); 
} 

này là hữu ích: Mã LoginUrlAuthenticationEntryPoint.java on grepcode.com

0

Josh là chính xác những gì tôi cần phải bắt lỗi xác thực AJAX trong JavaScript, trong khi vẫn duy trì sự chuyển hướng Logic đăng nhập mặc định cho tất cả các yêu cầu khác. Vì tất cả các yêu cầu AJAX của tôi bắt đầu bằng "/ rest", tôi đã có thể lọc về điều này.

if(request.getRequestURI().contains("/rest/")) 
    response.sendError(403); 
else 
    new DefaultRedirectStrategy().sendRedirect(request, response, "/login"); 
Các vấn đề liên quan