Попытка настроить конфигурацию JWT. Похоже, JWT устарел. Как я могу использовать OAuth2ResourceServerConfigurer::jwt сейчас?
Мой код:
@Bean
SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.authorizeHttpRequests((requests) -> requests.anyRequest().authenticated());
http.sessionManagement((session) -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS));
//http.formLogin(withDefaults());
http.httpBasic(Customizer.withDefaults());
http.csrf(csrf -> csrf.disable());
http.headers(headers -> headers.frameOptions(frameOptionsConfig -> frameOptionsConfig.sameOrigin()));
http.oauth2ResourceServer(OAuth2ResourceServerConfigurer::jwt);
return http.build();
}
Кроме того, в Spring Security 6.0 antMatchers(), а также другие методы настройки для защиты запросов (а именно mvcMatchers() и regexMatchers()) были удалены из API.




Общий совет Spring заключается в том, чтобы сначала перейти на Spring 5.8, а затем на 6.0, чтобы обеспечить более плавный переход к новым функциям.
Как указано в документации Spring Security 5.8:
В Spring Security 5.8 методы antMatchers, mvcMatchers и regexMatchers устарели в пользу новых методов requestMatchers.
Насколько я знаю, http.oauth2ResourceServer(OAuth2ResourceServerConfigurer::jwt) все еще должен работать, это даже упоминается в документации Spring Security 6.0 о JWT:
Обычно классы Spring имеют отличную документацию об устаревших методах, т. е. JavaDoc часто дает подсказки, какой класс или метод использовать вместо этого.
В дополнение к ответу @schrom и другим вопросам, связанным с прекращением поддержки OAuth2ResourceServerConfigurer#jwt, Spring Security объявила устаревшими методы, которые возвращают собственный конфигуратор, в пользу тех, которые возвращают HttpSecurity, и устарела метод .and() из HttpSecurity.
Например, httpBasic() устарел в пользу httpBasic(Customizer). Эти устаревания были сделаны, чтобы иметь только один способ настроить безопасность DSL, который использует лямбда-выражения. Взгляните на документацию.
Итак, для конфигурации JWT вам нужно будет сделать:
oauth2ResourceServer((oauth2) -> oauth2
.jwt(Customizer.withDefaults())
)
Попробуйте это так:
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
// Other stuff
.oauth2ResourceServer((rs) ->
rs.jwt((jwt) ->jwt.decoder(jwtDecoder()))
);
return http.build();
}
@Bean
public JwtDecoder jwtDecoder() {
// return your JWTdecoder
}