使用新的授权模型
在Spring Security 6.x中,AccessDecisionVoter已被废弃。取而代之的是一种新的授权模型,它将访问控制委托给更高级别的抽象类,如AccessDecisionManager和AccessDecisionBuilderFactory。
为了迁移您的应用程序到Spring Security 6.x,您需要更新您的代码以使用新的授权模型。
以前:
public class MyVoter implements AccessDecisionVoter
@Override
public boolean supports(ConfigAttribute attribute) {
return true;
}
@Override
public boolean supports(Class> clazz) {
return true;
}
@Override
public int vote(Authentication authentication, Object object,
Collection attributes) {
return AccessDecisionVoter.ACCESS_DENIED;
}
}
更改为:
@Configuration @EnableGlobalMethodSecurity(prePostEnabled = true) public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration {
@Override
protected AccessDecisionManager accessDecisionManager() {
List> decisionVoters = new ArrayList<>();
decisionVoters.add(new RoleVoter());
decisionVoters.add(new AuthenticatedVoter());
return new AffirmativeBased(decisionVoters);
}
}
此更改将更新了Spring Security 6.x的授权模型,并使用新的AffirmativeBased类将访问决策委托给AccessDecisionVoter列表。请注意,如果您使用@EnableGlobalMethodSecurity(prePostEnabled = true)注释,则必须在GlobalMethodSecurityConfiguration中实现accessDecisionManager()方法。