Spring Security记住了我的注销问题

时间:2016-06-26 15:48:19

标签: java spring spring-mvc cookies spring-security

我对remember me有疑问。我使用PersistentTokenRepository实现了它。一切都有效,除了注销。

登录后,会创建数据库中的新记录,用户已记住我。

删除会话cookie后,用户获取新cookie,更新DB中的旧记录。

/logout之后,没有调用logout方法(来自PersistentTokenBasedRememberMeServices,我通过扩展类和日志来检查它)。如何将其添加到注销过滤器或者像这样?我检查了源和logout方法调用从DB中删除记录并删除co​​okie,所以我只需要调用它。 我正在使用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);

1 个答案:

答案 0 :(得分:1)

问题解决了。我不得不更换控制器,因为我正在使用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";
}

并将表单添加到POST /logout