Spring Security全局方法安全XML转Java配置:自定义组件配置疑问
把Spring Security全局方法安全的XML配置转成Java配置
嗨,我来帮你搞定这个转换!你已经用了@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)来开启注解支持,剩下的自定义访问决策管理器和表达式处理器,只需要通过继承GlobalMethodSecurityConfiguration类来定制就好啦。
步骤1:创建全局方法安全配置类
写一个配置类继承GlobalMethodSecurityConfiguration,同时保留@EnableGlobalMethodSecurity注解,然后重写对应的方法来注入你的自定义Bean:
@Configuration @EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true) public class CustomMethodSecurityConfig extends GlobalMethodSecurityConfiguration { // 注入你自定义的访问决策管理器 @Autowired private AccessDecisionManager methodAccessDecisionManager; // 注入你自定义的方法表达式处理器 @Autowired private MethodSecurityExpressionHandler methodExpressionHandler; // 替换默认的访问决策管理器,对应XML里的access-decision-manager-ref @Override protected AccessDecisionManager accessDecisionManager() { return methodAccessDecisionManager; } // 替换默认的表达式处理器,对应XML里的expression-handler @Override protected MethodSecurityExpressionHandler createExpressionHandler() { return methodExpressionHandler; } }
步骤2:确保自定义Bean已注册到Spring容器
你需要把methodAccessDecisionManager和methodExpressionHandler作为Bean注册到Spring中,比如用@Bean注解:
自定义访问决策管理器的Bean示例
@Bean public AccessDecisionManager methodAccessDecisionManager() { // 返回你的自定义AccessDecisionManager实现类实例 return new YourCustomAccessDecisionManager(); }
自定义表达式处理器的Bean示例
如果是基于默认处理器扩展的话:
@Bean public MethodSecurityExpressionHandler methodExpressionHandler() { DefaultMethodSecurityExpressionHandler expressionHandler = new DefaultMethodSecurityExpressionHandler(); // 这里可以添加自定义配置,比如设置权限评估器 // expressionHandler.setPermissionEvaluator(new YourCustomPermissionEvaluator()); return expressionHandler; }
这样配置完成后,就和你原来的XML配置功能完全一致了:既开启了@Secured和Spring Security的pre/post注解支持,又用上了你自定义的访问决策管理器和表达式处理器。
内容的提问来源于stack exchange,提问作者flopcoder
相关产品推荐
相关产品推荐

