Я хочу управлять сеансом, используя Redis Session в spring-boot и zuul.
Чтобы включить сеанс Redis, мы активировали, как показано ниже.(Все службы)
@Configuration
@EnableRedisHttpSession(redisFlushMode = RedisFlushMode.IMMEDIATE)
public class SessionConfig extends AbstractHttpSessionApplicationInitializer {
}
Сохранение объекта аутентификации показано ниже.
securityContext.setAuthentication(appInstanceContext.authentication);
session.setAttribute("SPRING_SECURITY_CONTEXT", securityContext);
Обычно проверяется SecurityContext в фильтре, как показано ниже в службе, которая фактически используетсеанс.
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest)request;
SecurityContext securityContext = SecurityContextHolder.getContext();
Authentication authentication = securityContext.getAuthentication();
HttpSession session = httpServletRequest.getSession();
System.out.println(httpServletRequest.getRequestURI() + " :: " + session.getId() + " // " + authentication);
chain.doFilter(request, response);
}
-> / api / test :: 0feafb3f-7694-459f-aa39-ddb413d46b79 // com.xxxx.AuthenticationToken@5540979
Тем не менее, выполняется SecurityContextHolder.getContext ().GetAuthentication () в методе Controller возвращает значение Null.