2016-06-26 5 views
1

remember me에 문제가 있습니다. PersistentTokenRepository를 사용하여 구현했습니다. 로그 아웃을 제외하고 모두 작동합니다.스프링 보안 나를 기억하는 로그 아웃 문제

로그인 후 DB의 새 레코드가 생성되고 사용자는 remember-me 쿠키를가집니다.

세션 쿠키를 삭제 한 후 사용자가 새 쿠키를 얻으면 DB의 이전 레코드가 업데이트됩니다.

/logoutlogout 메서드가 호출되지 않습니다 (PersistentTokenBasedRememberMeServices에서 클래스 및 로깅을 확장하여 검사 함). 어떻게 로그 아웃 필터에 추가 하시겠습니까? 소스를 확인하고 logout 메서드는 DB에서 레코드를 제거하고 쿠키를 삭제하므로 호출 만하면됩니다. 자바 구성을 사용하고 있습니다.

보안 : 해결

http.csrf(); 
http.authorizeRequests().antMatchers("/").permitAll().antMatchers("/test").hasRole("USER") 
    .antMatchers("/made/administration/**").hasRole("ADMIN"); 
http.formLogin().loginPage("/login").usernameParameter("email").passwordParameter("password"); 
http.logout().logoutUrl("/logout").logoutSuccessUrl("/login?logout"); 
http.exceptionHandling().accessDeniedPage("/access-denied"); 
http.rememberMe().tokenRepository(persistentTokenRepository) 
    .tokenValiditySeconds(rememberMeValidSeconds); 

답변

0

문제. 컨트롤러를 변경해야하고 POST (not GET)에 의해 csrf - logout을 사용하고 있기 때문에.

그래서 나는 제거 :

@RequestMapping(value = "/logout", method = RequestMethod.GET) 
public String logoutPage(HttpServletRequest request, HttpServletResponse response) { 
    Authentication auth = SecurityContextHolder.getContext().getAuthentication(); 
    if (auth != null) { 
    new SecurityContextLogoutHandler().logout(request, response, auth); 
    } 
    return "redirect:/login?logout"; 
} 

그리고 /logout

를 게시 할 양식을 추가
관련 문제