2016-06-26 6 views
1

У меня проблема с remember me. Я реализовал его с помощью PersistentTokenRepository. Все работает, кроме выхода из системы.Весна Безопасность запомнить меня Выход из системы

После входа в систему создается новая запись в БД, пользователь помнит-я cookie.

После удаления сеансового файла cookie пользователь получает новый файл cookie, обновляется старая запись в БД.

После того, как метод /logout, logout не вызывается (из PersistentTokenBasedRememberMeServices, я проверил его путем расширения класса и ведения журнала). Как добавить его в logout filter или sth, как это? Я проверил источник, и метод logout вызывает удаление записи из БД и удаляет файл cookie, поэтому мне нужно только вызвать его. Я использую java config.

Безопасность:

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"; 
} 

И добавил формы POST /logout

Смежные вопросы