2016-06-26 68 views
1

我有一個問題remember me。我已經使用PersistentTokenRepository實現了它。除註銷外,一切都可以運作的Spring Security還記得我退出問題

登錄後,將創建在DB的新紀錄,用戶還記得,我的cookie。

刪除會話cookie後,用戶獲得新的cookie,老記錄在數據庫中更新。

之後/logout,logout方法未被調用(來自PersistentTokenBasedRememberMeServices,我通過擴展類和日誌記錄來檢查它)。如何將它添加到註銷過濾器或者像這樣?我查源和logout方法調用從DB刪除記錄和刪除Cookie,所以我只需要調用它。 我正在使用java配置。

安全:

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

問題解決了。我不得不改變控制器,因爲我使用csrf - 通過POST(而不是GET)註銷。

所以我刪除:

@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