You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义AuthorizationManager<MethodInvocation>的check方法未触发排查请求

问题排查与解决方案

以下是导致自定义AuthorizationManager的check方法未触发的常见原因及对应解决办法:

1. 切入点正则未匹配目标方法

JdkRegexpMethodPointcut的pattern匹配的是方法的全限定名(包名+类名+方法名),你设置的"xxx.*"仅能匹配以xxx开头的方法名,但如果目标方法的全限定名是类似com.example.service.UserService.xxxQuery,这个正则无法匹配。

解决:调整正则表达式为准确匹配,比如要匹配com.example.service包下所有类中以xxx开头的方法,可设置:

pattern.setPattern("com.example.service.*.xxx.*");

2. 未开启方法级安全支持

必须在Spring配置类上添加注解开启方法安全,否则方法拦截器不会生效:

  • Spring Security 5.6+ 使用@EnableMethodSecurity
  • 旧版本使用@EnableGlobalMethodSecurity(prePostEnabled = true)

示例配置类:

@Configuration
@EnableMethodSecurity
public class SecurityConfig {
    // 你的自定义Advisor Bean等配置
}

3. 确认Advisor Bean是否被正确加载

虽然你标注了@Role(BeanDefinition.ROLE_INFRASTRUCTURE),但可通过以下方式验证Bean是否注册:

  • 启动日志中搜索customAuthorize Bean是否被初始化
  • 调试时查看MethodSecurityInterceptor的拦截器链中是否包含你的AuthorizationManagerBeforeMethodInterceptor

4. 拦截器顺序冲突(可能性较低)

你设置的interceptor.setOrder(AuthorizationInterceptorsOrder.PRE_AUTHORIZE.getOrder() - 1)优先级高于@PreAuthorize,但如果目标方法上同时存在其他方法安全注解,且对应的拦截器提前终止了拦截链,可能导致你的自定义拦截器未执行。可尝试暂时移除其他方法安全注解,单独测试自定义拦截器是否生效。


内容的提问来源于stack exchange,提问作者Ole K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 09:07:33