Spring 已更新,称authorizeRequests 已弃用,antMatchers 已删除。有人可以展示 SpringSecurity 应该是什么样子吗?
@Configuration
@EnableWebSecurity
@EnableMethodSecurity(prePostEnabled = false, securedEnabled = true)
public class SecurityConfig {
private final PersonDetailsService personDetailsService;
@Autowired
public SecurityConfig(PersonDetailsService personDetailsService) {
this.personDetailsService = personDetailsService;
}
@Bean
public AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration) throws Exception {
return authenticationConfiguration.getAuthenticationManager();
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.cors().and().csrf().disable().authorizeHttpRequests(authorize -> authorize
.requestMatchers("/, /login, /signup, /logout").permitAll()
.requestMatchers("/api").hasRole("ADMIN")
.requestMatchers("/user").hasRole("USER")
.anyRequest().authenticated())
.logout().logoutUrl("/logout").logoutSuccessUrl("/").and()
.formLogin().loginPage("/login").loginProcessingUrl("/login").defaultSuccessUrl("/user").failureUrl("/login?error");
return http.build();
}
}
Run Code Online (Sandbox Code Playgroud)
看了文档、stackoverflow等没有找到解决办法。
小智 94
您可以使用authorizeHttpRequests代替authorizeRequests和requestMatchers代替antMatchers。
例如:
http.authorizeHttpRequests()
.requestMatchers("/authentication/**").permitAll()
.requestMatchers("/h2/**").permitAll()
.anyRequest().authenticated();
Run Code Online (Sandbox Code Playgroud)
Seb*_*oek 22
@Tyler2P的答案适用于 Spring Boot 3.0,但在 Spring Boot 3.1 中, authorizeHttpRequests() 已被弃用,取而代之的是不同的 API。
现在应该是
http.authorizeHttpRequests(authz -> authz
.requestMatchers("/authentication/**").permitAll()
.requestMatchers("/h2/**").permitAll()
.anyRequest().authenticated());
Run Code Online (Sandbox Code Playgroud)
迁移指南中也提到了这一点:https ://docs.spring.io/spring-security/reference/5.8/migration/servlet/config.html
另请注意,在更高版本的 Spring Boot 3.1 中,使用 lambda 的中间方法authorizeRequests也已被弃用,取而代之的是authorizeHttpRequests,但这确实改变了功能。其一,我们的自定义身份验证提供程序不再被调用,因此我们还无法迁移。
对于 Spring Boot 3.1.0 我的迁移filterChain(HttpSecurity http)示例:
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.securityMatcher("/api/**").authorizeHttpRequests(rmr -> rmr
.requestMatchers("/api/admin/**").hasRole(Role.ADMIN.name())
.requestMatchers("/api/**").authenticated()
).httpBasic(httpbc -> httpbc
.authenticationEntryPoint(authenticationEntryPoint)
).sessionManagement(smc -> smc
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
).csrf(AbstractHttpConfigurer::disable);
return http.build();
}
Run Code Online (Sandbox Code Playgroud)
示例代码可以在https://github.com/JavaOPs/bootjava/tree/patched找到
| 归档时间: |
|
| 查看次数: |
62500 次 |
| 最近记录: |