Я использую реагирующий / весенний отдых и делаю программный выход из системы. Вход в систему работает нормально, и когда пользователь выходит из системы, запрос отправляется на контроллер и выходит из системы. У меня проблема в том, что в методе выхода из системы внутри контроллера я получаю NULL из контекста безопасности. Похоже, старая сессия прошла. Как я могу получить / сохранить информацию о пользователе на SecurityContextHolder. Кроме того, я использую Spring-Redis для поддержания сеанса. После успешного входа в систему информация о сеансе сохраняется в Redis, но SecurityContext становится пустым.
Некоторые фрагменты кода (выход):
HttpSession session = request.getSession(false);
//session is null
final Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
// authentication.getName is null
if (session != null) {
session.invalidate();
session.setMaxInactiveInterval(0);
}
SecurityContextHolder.clearContext();
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : request.getCookies()) {
if ("JSESSONID".equals(cookie.getName())) {
cookie.setMaxAge(0);
response.addCookie(cookie);
}
}
}`
И httpCOnfig:
http
.authorizeRequests()
.antMatchers("/api/user/**").hasAnyRole(ROLE_ADMIN, ROLE_REGISTERED_USER)
.antMatchers("/api/admin/**").hasRole(ROLE_ADMIN)
.antMatchers("/api/public/**").permitAll()
.anyRequest().authenticated()
.and()
.csrf().disable()
.cors()
.and()
.httpBasic();
}