2012-07-05 50 views
5

Tôi muốn đăng nhập mọi thông tin đăng nhập trong ứng dụng web của mình. Tôi đã có thể truy cập thông tin đăng nhập diễn ra thông qua UsernamePasswordAuthenticationFilter nhưng tôi không biết cách đăng nhập người dùng đăng nhập bằng chức năng ghi nhớ tôi. Tôi cố gắng trọng cácGhi lại thông tin đăng nhập bằng Spring Security

createSuccessfulAuthentication(HttpServletRequest request, UserDetails user) 

của TokenBasedRememberMeServices, nhưng sau đó thoát ra được ghi nhận quá, vì nhớ-tôi phục vụ tái xác thực người dùng.

Trả lời

5

Để đăng nhập mỗi lần đăng nhập thành công, tôi nghĩ cách tốt nhất là tạo LoginSucessHandler và chỉ định xác thực-thành công-handler cho đăng nhập bình thường cũng như ghi nhớ tôi. tôi đã làm điều này với mã dưới đây và cấu hình.

@Service 
public class LoginSucessHandler extends 
     SavedRequestAwareAuthenticationSuccessHandler { 

    @Override 
    public void onAuthenticationSuccess(HttpServletRequest request, 
      HttpServletResponse response, Authentication authentication) 
      throws ServletException, IOException { 
     User user = (User) authentication.getPrincipal(); 
      // record login success of user 
     super.onAuthenticationSuccess(request, response, authentication); 
    } 

} 

<http auto-config="true" use-expressions="true"> 
    <form-login login-page="/login" 
     authentication-failure-url="/login.hst?error=true" 
     **authentication-success-handler-ref="loginSucessHandler"** /> 
    <logout invalidate-session="true" logout-success-url="/home" 
     logout-url="/logout" /> 
    <remember-me key="jbcp" **authentication-success-handler-ref="loginSucessHandler"**/> 
    <session-management> 
    <concurrency-control max-sessions="1" /> 
</session-management> 
</http> 
0

Tôi nghĩ trong trường hợp của bạn sẽ giúp giải pháp khi bạn sẽ sử dụng bộ lọc tùy chỉnh của mình, bộ lọc này sẽ chặn mọi yêu cầu đối với ứng dụng của bạn. Trong bộ lọc này, bạn có thể đăng nhập tên người dùng cho mọi yêu cầu.

Here I described how to add your custom filter. Bạn chỉ cần thay đổi chức năng cho những gì bạn muốn. Và đừng quên đặt bộ lọc của bạn sau chuỗi bộ lọc bảo mật trong web.xml.

4

Cách tốt nhất để ghi nhật ký xác thực thành công và thất bại là sử dụng Spring ApplicationListener.

Bảo mật mùa xuân xuất bản nhiều sự kiện khác nhau để xác thực thành công và lỗi mà bạn có thể nghe. Sự kiện cũng được xuất bản khi quyền truy cập bị từ chối vào tài nguyên.

Bạn có thể xem LoggerListener làm ví dụ. Bắt đầu bằng cách thêm một trong số đó vào ngữ cảnh ứng dụng của bạn và nó sẽ tự động ghi lại các sự kiện xác thực ở mức cảnh báo.

Về thông tin đăng nhập nhớ, nếu bạn đăng xuất và sau đó truy cập trang web ngay sau đó và được xác thực lại bằng cookie nhớ, thì về mặt kỹ thuật giống với bất kỳ xác thực ghi nhớ nào khác, vì vậy không có nhiều bạn có thể làm về nó. Tuy nhiên, nếu URL thành công đăng xuất của bạn đi qua bộ nhớ nhớ-tôi và đó là cách phiên mới được tạo (không có bất kỳ hành động bổ sung nào từ người dùng), thì chỉ cần bỏ qua trang đó từ bộ lọc bảo mật chuỗi.

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