2011-01-13 53 views
6

Tôi có tuyên bố sau đây trong tệp cấu hình bảo mật mùa xuân của mình (http://www.springframework.org/schema/security/spring-security-2.0.1.xsd) :Nhận url yêu cầu ban đầu trong trang đăng nhập biểu mẫu Spring Security

<form-login login-page="/login.html" /> 

Điều gì bảo mật mùa xuân sẽ chuyển hướng người dùng đến trang đó nếu họ không có thông tin xác thực chính xác. Làm thế nào tôi có thể nhận được url của trang mà người dùng đang cố truy cập?

+1

Có thể liên quan đến http://stackoverflow.com/questions/631217/spring-security-how-to-get-the-initial-target-url – Raghuram

+0

Cảm ơn các liên kết! –

Trả lời

9

Yêu cầu ban đầu được đại diện bởi đối tượng SavedRequest, có thể được truy cập dưới dạng thuộc tính phiên có tên là SPRING_SECURITY_SAVED_REQUEST_KEY.

+0

Nhìn vào tài liệu bạn liên kết với nó nói 'kể từ 3.0'. Tôi đang sử dụng Spring Security 2 (như đã đề cập trong câu hỏi). Bạn có biết điều này sẽ vẫn hoạt động không? –

+1

@ Adbullah: Tôi nghĩ rằng trong Spring Security 2 nó hoạt động theo cùng một cách: http://static.springsource.org/spring-security/site/docs/2.0.x/apidocs/org/springframework/security/ui/savedrequest/ SavedRequest.html – axtavt

+0

Cảm ơn, rất tiếc, tôi nghĩ tôi đã đặt câu hỏi sai về những gì tôi muốn làm, hãy xem câu hỏi mới nếu bạn có cơ hội: http://stackoverflow.com/questions/4696905/make-spring -security-add-the-return-to-url-in-the-truy vấn-chuỗi-cho-đăng-trang –

0

Trong Xuân An 4

Các yêu cầu ban đầu được biểu diễn bởi các đối tượng DefaultSavedRequest, mà có thể được truy cập như một thuộc tính phiên tên SPRING_SECURITY_SAVED_REQUEST.

@RequestMapping(value = "/login", method = RequestMethod.GET) 
public String login(HttpSession session) { 
    DefaultSavedRequest savedRequest = (DefaultSavedRequest) session.getAttribute("SPRING_SECURITY_SAVED_REQUEST"); 
} 
0

trong trường hợp của tôi, tôi đã làm một cái gì đó như thế này và nó làm việc cho tôi.

@Autowired 
private LoggedUserListener loggedUserListener; 

@Override 
protected void configure(HttpSecurity http) throws Exception { 
http.csrf().disable() 
    .authorizeRequests() 
    .antMatchers("/find/**","/","/Application/**") 
    .access("hasRole('ROLE_USER')") 
    .successHandler(loggedUserListener) 
//some other stuff 
} 



@Component 
public class LoggedUserListener implements AuthenticationSuccessHandler{ 

@Autowired 
private UserRepo userRepo; 

@Override 
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, 
     Authentication authentication) throws IOException, ServletException { 

    HttpSession session = request.getSession(); 
    SavedRequest savedRequest = (SavedRequest) session.getAttribute("SPRING_SECURITY_SAVED_REQUEST"); 

    if(savedRequest != null) { 

     User u = userRepo.findByUsername(authentication.getName()); 

     u.setLastLogin(new Date()); 
     u.setAccountNonLocked(false); 

     userRepo.save(u); 
     response.sendRedirect(savedRequest.getRedirectUrl()); 
    } 
    } 

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