| 当前所有认证请求配置和应用权限配置在安全模块中,而很多权限配置是在应用模块提供的对应服务处理逻辑,这样只有应用模块才知道的这些配置,所以要将它们抽取到应用中进行配置 |
| 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(); |
| |
| config.anyRequest().authenticated(); |
| } |
| |
| } |
| |
| @Component |
| public class SystemAuthorizeConfigurerProvider implements AuthorizeConfigurerProvider { |
| |
| @Override |
| public void confiure(ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry config) { |
| |
| config.antMatchers("/success").hasAuthority("sys:user") |
| |
| .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; |
| |
| |
| @Override |
| public void configure(ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry config) { |
| for(AuthorizeConfigurerProvider provider: authorizeConfigurerProviders) { |
| provider.confiure(config); |
| } |
| } |
| |
| } |
| |
| # security配置类中添加如下 |
| @Autowired |
| private AuthorizeConfigurerManager authorizeConfigurerManager; |
| |
| authorizeConfigurerManager.configure(http.authorizeRequests()); |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通