Существуют приложения Сервер авторизации (UAA), Сервер ресурсов и Шлюз, которые работают правильно.Сценарий для аутентификации authorization_code
.В первый раз после аутентификации к концу запроса добавляется ;jesessionid=[value]
, поэтому его результатом является исключение из HttpFirewall
приложения Gateway из-за наличия ';'
в запросе. У меня вопрос, что это такое и почему jessionid добавляется в конце запроса?и как это можно адаптировать с HttpFirewall
. Я нашел способ обойти, но я знаю, что есть некоторые риски.Это выглядит так:
@Bean
public HttpFirewall allowUrlEncodedSlashHttpFirwall() {
StrictHttpFirewall firewall = new StrictHttpFirewall();
firewall.setAllowSemicolon(true);
return firewall;
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf()
.disable()
.headers().cacheControl().disable()
.and()
.headers()
.cacheControl()
.disable()
.frameOptions()
.sameOrigin()
.and()
.httpBasic().disable()
.authorizeRequests()
.requestMatchers(EndpointRequest.toAnyEndpoint()).permitAll()
.requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll()
.mvcMatchers("/uaa/**", "/login**", "/favicon.ico", "/error**").permitAll()
.anyRequest().authenticated()
.and()
.logout()
.permitAll();
}
@Override
public void configure(WebSecurity web) throws Exception {
super.configure(web);
web.httpFirewall(allowUrlEncodedSlashHttpFirwall());
}
Как и в приведенной выше конфигурации, ;
пропускается, но это неверно и имеет некоторые риски.
Как правильно и как решить эту проблему?