展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

授权配置分层管理

  • 简介
当前所有认证请求配置和应用权限配置在安全模块中,而很多权限配置是在应用模块提供的对应服务处理逻辑,这样只有应用模块才知道的这些配置,所以要将它们抽取到应用中进行配置
  • 实现步骤
1. 创建 AuthorizeConfigurerProvider 授权配置统一接口。
2. 针对每个功能模块都创建一个 AuthorizeConfigurerProvider 接口的模块权限配置实现类,如:用户模块权限配置实现类、角色模块权限配置实现类
3. 将对应权限配置抽取到对应 AuthorizeConfigurerProvider 的实现类中
4. 创建一个授权配置管理者接口 AuthorizeConfigurerManager 管理所有的授权配置
5. 通过 AuthorizeConfigurerManager 接口实现类,将 AuthorizeConfigureProvider 所有的授权配置实现类全部加载到容器中。
  • 代码实现
public interface AuthorizeConfigurerProvider {
void confiure(ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry config);
}
@Component
@Order(Integer.MAX_VALUE) // 值越小加载越优先,值越大加载越靠后
public class CustomAuthorizeConfigurerProvider implements AuthorizeConfigurerProvider {
@Override
public void confiure(ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry config) {
config.antMatchers("/login",
"/test"
).permitAll(); // 放行/login/page不需要认证可访问
// 其他请求都要通过身份认证
config.anyRequest().authenticated();
}
}
@Component
public class SystemAuthorizeConfigurerProvider implements AuthorizeConfigurerProvider {
@Override
public void confiure(ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry config) {
// 有 sys:user 权限的可以访问任意请求方式的/role
config.antMatchers("/success").hasAuthority("sys:user")
// 有 sys:role 权限的可以访问 get方式的/role
.antMatchers(HttpMethod.GET,"/test1").hasAuthority("sys:role");
}
}
public interface AuthorizeConfigurerManager {
void configure(ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry config);
}
@Component
public class CutomAuthorizeConfigurerManager implements AuthorizeConfigurerManager {
@Autowired
List<AuthorizeConfigurerProvider> authorizeConfigurerProviders;
// 将一个个AuthorizeConfigurerProvider的实现类,传入配置的参数 ExpressionInterceptUrlRegistry
@Override
public void configure(ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry config) {
for(AuthorizeConfigurerProvider provider: authorizeConfigurerProviders) {
provider.confiure(config);
}
}
}
# security配置类中添加如下
@Autowired
private AuthorizeConfigurerManager authorizeConfigurerManager;
authorizeConfigurerManager.configure(http.authorizeRequests());
posted @   DogLeftover  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示