spring security6.0 认证新写法
时间: 2023-07-26 10:43:56 浏览: 124
Spring Security 6.0相对于之前的版本,在认证方面的写法也有所变化,可以使用`AuthenticationProvider`和`AuthenticationManager`来处理认证。
以下是一个简单的示例:
```java
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsService userDetailsService;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(authenticationProvider());
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers("/user/**").hasRole("USER")
.anyRequest().authenticated()
.and()
.formLogin()
.and()
.logout().logoutSuccessUrl("/");
}
@Bean
public AuthenticationManager authenticationManager() {
List<AuthenticationProvider> providers = new ArrayList<>();
providers.add(authenticationProvider());
return new ProviderManager(providers);
}
@Bean
public AuthenticationProvider authenticationProvider() {
DaoAuthenticationProvider provider = new DaoAuthenticationProvider();
provider.setUserDetailsService(userDetailsService);
provider.setPasswordEncoder(passwordEncoder());
return provider;
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
```
以上代码使用了`AuthenticationProvider`和`AuthenticationManager`来处理认证,其中:
- `AuthenticationProvider`负责加载用户信息并进行认证。
- `AuthenticationManager`负责管理多个`AuthenticationProvider`,并进行认证操作。
- `DaoAuthenticationProvider`是一个常用的`AuthenticationProvider`,它通过`UserDetailsService`加载用户信息,并使用指定的密码加密方式对密码进行加密和比对。
- `PasswordEncoder`负责对密码进行加密。
需要注意的是,如果您使用了自定义的`AuthenticationProvider`,则需要在`AuthenticationManager`中添加相应的`AuthenticationProvider`。
以上代码只是一个简单的示例,实际项目中需要根据具体需求进行修改配置。
阅读全文