可以给我我一段代码实例吗?
时间: 2023-08-07 08:07:36 浏览: 86
一个代码例子
当然可以,以下是一个使用多个 `WebSecurityConfigurerAdapter` 子类实现不同安全策略的示例代码:
```java
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
// 配置基于内存的身份验证
auth.inMemoryAuthentication()
.withUser("user").password("{noop}password").roles("USER")
.and()
.withUser("admin").password("{noop}password").roles("ADMIN");
}
@Configuration
@Order(1)
public static class ApiWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
// 配置 API 访问的安全规则
http.antMatcher("/api/**")
.authorizeRequests()
.anyRequest().hasRole("USER")
.and()
.httpBasic();
}
}
@Configuration
@Order(2)
public static class FormLoginWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
// 配置基于表单的身份验证
http.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin()
.and()
.httpBasic().disable();
}
}
}
```
这个示例代码中,我们定义了两个 `WebSecurityConfigurerAdapter` 的子类,分别用于实现不同的安全策略。其中,`ApiWebSecurityConfigurationAdapter` 子类用于配置 API 访问的安全规则,要求 `/api/**` 的请求必须具备 `USER` 角色才能访问,而 `FormLoginWebSecurityConfigurerAdapter` 子类则用于配置基于表单的身份验证,要求所有请求都必须经过身份验证才能访问。通过在子类中使用 `@Order` 注解来指定执行顺序,我们可以确保安全规则能够正确地匹配请求。
阅读全文