Я хочу обновить Spring-Boot до 3.5.8. Я могу запустить приложение в первый раз. Во время первого выхода из системы запрос возвращает значение null для getPrincipal(). Следовательно, выход из системы происходит правильно.
Код: Выделить всё
private void oktaLogout(HttpServletRequest request) {
OidcUser oidcUser = getOidcUser(request);
if (oidcUser == null) return;
Map claims = oidcUser.getClaims();
if(claims.keySet().contains("iss") && claims.get("iss") != null) {
String issuer = claims.get("iss").toString();
String logoutUrl = issuer + "/v1/logout?id_token_hint=" + oidcUser.getIdToken().getTokenValue() + "&post_logout_redirect_uri=" + appSettings.getLogoutUrl();
request.getSession().invalidate();
request.getSession().setAttribute("logoutUrl", logoutUrl);
}
}
public OidcUser getOidcUser(HttpServletRequest request) {
Principal principal = request.getUserPrincipal();
if (principal == null) return null; //Here it returns null during logout
OAuth2AuthenticationToken token = (OAuth2AuthenticationToken) principal;
return (OidcUser) token.getPrincipal();
}
Код: Выделить всё
SecurityConfig.java
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.csrf((csrf) -> csrf.disable())
.authorizeHttpRequests( (authorize) -> authorize
.requestMatchers("/**", "/app/**", "/signout/**", "/error/**")
.authenticated())
.oauth2Login(Customizer.withDefaults())
.oauth2Client(Customizer.withDefaults())
;
return http.build();
}
}
Из-за этого я не смог запустить свое приложение со второго раза с панели управления okta и получил сообщение «Доступ к xxxx запрещен. У вас нет прав пользователя для просмотра этой страницы».
Эта проблема возникает с версии весенней загрузки 3.1.9, до 3.1.8 она работает нормально.
В журнале приложения ошибок нет, запрос на повторный вход не доходит до окты. Я проверил системный журнал okta.
Может кто-нибудь мне помочь?
Подробнее здесь: https://stackoverflow.com/questions/798 ... 9-or-3-5-8
Мобильная версия