#spring #spring-security
Вопрос:
Мое приложение имеет архитектуру микросервиса, есть службы и шлюз (zuul). Спереди все запросы направляются на шлюз, а затем проксируются службе.
У меня есть конечная точка /iam/пользователи/подтверждение, она открыта (не требует авторизации).
Если я отправляю запрос, когда пользователь не авторизован (файл cookie JSESSIONID отсутствует) или авторизован, запрос работает нормально, но если я отправляю запрос по истечении сеанса, я получаю ошибку 401 в шлюзе.
в моей консоли в шлюзе:
o.a.coyote.http11.Http11InputBuffer : Received [POST /gateway/iam/users/confirm HTTP/1.1
Content-Type: application/json
User-Agent: PostmanRuntime/7.28.2
Accept: */*
Host: localhost:9292
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Content-Length: 55
Cookie: JSESSIONID=4696E27D6EE8B9BF05AF820AA0693B8D
{
"token": "3a330d68-8716-49af-8f93-fce739c95883"
}]
2021-07-14 17:22:50.687 DEBUG 13395 --- [nio-9292-exec-9] o.s.s.w.session.SessionManagementFilter : Requested session ID 4696E27D6EE8B9BF05AF820AA0693B8D is invalid.
2021-07-14 17:22:50.711 DEBUG 13395 --- [nio-9292-exec-9] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Using 'application/json', given [*/*] and supported [application/json, application/* json, application/json, application/* json]
2021-07-14 17:22:50.711 DEBUG 13395 --- [nio-9292-exec-9] o.s.w.s.m.m.a.HttpEntityMethodProcessor : Writing [{timestamp=Wed Jul 14 17:22:50 MSK 2021, status=401, error=Unauthorized, message=No message availabl (truncated)...]
2021-07-14 17:22:50.714 DEBUG 13395 --- [nio-9292-exec-9] w.c.HttpSessionSecurityContextRepository : SecurityContext is empty or contents are anonymous - context will not be stored in HttpSession.
2021-07-14 17:22:50.715 DEBUG 13395 --- [nio-9292-exec-9] o.s.web.servlet.DispatcherServlet : Exiting from "ERROR" dispatch, status 401
Мне нужна помощь в том, как сделать конечную точку /iam/пользователей/подтверждение всегда доступной, независимо от сеанса и авторизации.
WebSecurityConfigurerAdapter.class в шлюзе
@Override
public void configure(HttpSecurity http) throws Exception {
http.cors().and().csrf().disable()
.authorizeRequests()
.antMatchers("/audit/**").authenticated()
.anyRequest().permitAll()
.and()
.sessionManagement()
.sessionAuthenticationFailureHandler(failureHandler())
.invalidSessionStrategy(invalidSessionStrategy());
http.addFilterAfter(oAuth2ClientAuthenticationProcessingFilter(), DefaultLoginPageGeneratingFilter.class);
http.logout().
logoutUrl("/logout").invalidateHttpSession(true)
.clearAuthentication(true)
.deleteCookies("JSESSION")
.permitAll();
}
@Bean
public InvalidSessionStrategy invalidSessionStrategy() {
return (request, response) -> {
Cookie cookieRoot = new Cookie("JSESSIONID", null);
cookieRoot.setPath("/");
cookieRoot.setMaxAge(0);
response.addCookie(cookieRoot);
response.sendRedirect("http://localhost:9000");
};
}