springboot security 匿名访问登录
时间: 2023-08-28 13:06:02 浏览: 46
在Spring Security中,可以使用`WebSecurityConfigurerAdapter`配置类来配置匿名访问和登录认证。
首先,需要在`configure(HttpSecurity http)`方法中配置匿名访问,例如:
```java
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/public/**").permitAll() // 允许匿名访问的路径
.anyRequest().authenticated() // 其他路径需要认证后访问
.and()
.formLogin() // 配置表单登录
.and()
.logout(); // 配置退出登录
}
}
```
在上面的例子中,我们允许匿名访问`/public/**`路径,其他路径需要认证后访问。
接着,需要配置登录认证。可以使用`UserDetailsService`来定义系统中的用户和角色,例如:
```java
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsService userDetailsService;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/public/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.and()
.logout();
}
}
```
注意,`UserDetailsService`需要在配置类中注入,并在`configure(AuthenticationManagerBuilder auth)`方法中使用。
最后,需要在系统中定义用户和角色,可以使用`InMemoryUserDetailsManager`来实现:
```java
@Configuration
public class SecurityConfig {
@Bean
public UserDetailsService userDetailsService() {
InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
manager.createUser(User.withUsername("user").password("password").roles("USER").build());
manager.createUser(User.withUsername("admin").password("password").roles("USER", "ADMIN").build());
return manager;
}
}
```
在上面的例子中,我们定义了两个用户,一个是`USER`角色,另一个是`USER`和`ADMIN`角色。
通过以上配置,我们就可以实现匿名访问和登录认证。