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

Spring Security 6中自定义AuthorizationManager未生效求助

问题原因分析
  1. 缺少触发注解:自定义的AuthorizationManagerBeforeMethodInterceptor默认仅拦截带有@PreAuthorize注解的方法,而你的MyQueryResolver方法未标注该注解,因此不会触发check方法。
  2. GraphQL Bean代理问题:GraphQL Resolver Bean可能未被Spring AOP正确代理,导致方法安全拦截器无法生效。
解决方案

方案1:添加@PreAuthorize注解(快速生效)

给MyQueryResolver的所有方法添加@PreAuthorize注解,触发拦截器逻辑:

@Component
public class MyQueryResolver implements GraphQLQueryResolver {

    @PreAuthorize("permitAll") // 注解内容仅作为触发标识,实际授权逻辑由自定义manager处理
    public String hello1() {
        return "Hello1, GraphQL!";
    }

    @PreAuthorize("permitAll")
    public String hello2() {
        return "Hello2, GraphQL!";
    }
}

方案2:全局拦截(无需逐个加注解)

如果想对MyQueryResolver的所有方法自动应用授权,无需逐个添加注解,可以通过配置MethodSecurityMetadataSource指定全局规则:

  1. 修改MethodSecurityConfiguration,注册全局元数据源和拦截器:
@Configuration
@EnableMethodSecurity(proxyTargetClass = true) // 强制使用CGLIB代理,适配GraphQL Bean
public class MethodSecurityConfiguration {

    @Bean
    @Role(BeanDefinition.ROLE_INFRASTRUCTURE)
    public Advisor preAuthorizeAdvisor(CustomAuthorizationManager manager, MethodSecurityMetadataSource metadataSource) {
        AuthorizationManagerBeforeMethodInterceptor interceptor = AuthorizationManagerBeforeMethodInterceptor.preAuthorize(manager);
        interceptor.setMethodSecurityMetadataSource(metadataSource);
        return interceptor;
    }

    @Bean
    public MethodSecurityMetadataSource customMetadataSource() {
        MapBasedMethodSecurityMetadataSource metadataSource = new MapBasedMethodSecurityMetadataSource();
        // 配置MyQueryResolver的所有方法都需要PreAuthorize授权
        metadataSource.addSecureMethod(MyQueryResolver.class.getMethods(), "permitAll");
        return metadataSource;
    }
}
  1. 保留CustomAuthorizationManager的原有逻辑,可根据业务需求修改check方法中的授权判断逻辑。

额外注意事项

  • 确认Spring Security 6依赖版本与项目其他组件匹配,避免版本冲突。
  • 若使用Spring GraphQL,需确保@GraphQLQueryResolver标注的Bean被Spring正确扫描并管理。

内容的提问来源于stack exchange,提问作者Korki Korkig

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 13:20:17