AccessDecisionManager和AbstractSecurityInterceptor 都deprecated了,新的配置方法是什么?
时间: 2024-09-10 20:14:14 浏览: 60
在Spring Security的较新版本中,`AccessDecisionManager` 和 `AbstractSecurityInterceptor` 的使用依然存在,但是确实存在一些新的配置方式来优化安全拦截和决策管理。为了实现更加灵活和可定制的访问控制,Spring Security引入了一些新的配置方法和类。
对于 `AccessDecisionManager`,如果你需要进行自定义的访问决策管理,你可以实现 `AccessDecisionManager` 接口或者使用 `AffirmativeBased`、`ConsensusBased`、`UnanimousBased` 这些内置的决策管理器,并通过 `SecurityConfig` 使用自定义的 `AccessDecisionManager`。
对于 `AbstractSecurityInterceptor`,它是授权拦截器的抽象基类,例如 `FilterSecurityInterceptor` 和 `MethodSecurityInterceptor`。在新的Spring Security版本中,你仍然可以通过配置 `FilterSecurityInterceptor` 和 `MethodSecurityInterceptor` 来实现具体的访问控制逻辑。
以下是一个基于Spring Security 5的配置示例,展示了如何使用Java配置类和Bean定义来设置访问控制:
```java
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.access.AccessDecisionManager;
import org.springframework.security.web.access.expression.WebExpressionVoter;
import org.springframework.security.web.access.intercept.FilterSecurityInterceptor;
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests(authorizeRequests ->
authorizeRequests
.antMatchers("/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()
)
.formLogin(withDefaults());
}
// 自定义的AccessDecisionManager配置
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
// 用户名和密码的配置
}
// 自定义的FilterSecurityInterceptor配置
@Bean
public FilterSecurityInterceptor customFilterSecurityInterceptor() {
FilterSecurityInterceptor securityInterceptor = new FilterSecurityInterceptor();
// 配置你的访问决策管理器和资源访问规则等
return securityInterceptor;
}
}
```
在该示例中,我们通过配置类`SecurityConfig`来定义安全拦截规则。`FilterSecurityInterceptor`是`AbstractSecurityInterceptor`的一个具体实现,用于方法级别的安全拦截。通过自定义`FilterSecurityInterceptor`的Bean,你可以注入并配置你的访问决策管理器以及其他安全拦截规则。
阅读全文