避免在 @PreAuthorize 注释中使用文字 Spring boot EL

问题描述 投票:0回答:1

我目前正在努力避免安全注释中的文字。原因是,在大型应用程序中,这些注释中包含文字会依赖于多个错误,而且重构权限名称也会更容易。

我创建了一个

@Bean
,它的目的是注册我想要的
Enum
包,然后以这种方式在
@Preautorize
注释中使用
@PreAuthorize("hasAuthority(T(Permissions).CREATE)")

@Bean
    static MethodSecurityExpressionHandler methodSecurityExpressionHandler() {
        return new DefaultMethodSecurityExpressionHandler() {
            @Override
            public StandardEvaluationContext createEvaluationContext(Supplier<Authentication> authentication,
                                                                     MethodInvocation mi) {

                StandardEvaluationContext evaluationContext =
                        (StandardEvaluationContext) super.createEvaluationContext(authentication, mi);
                ((StandardTypeLocator) evaluationContext.getTypeLocator())
                        .registerImport(PermissionName.class.getPackage().getName());

                return evaluationContext;
            }
        };
    }

但是函数

T()
无法解析类
Permissions

关于我正在研究Spring Boot的技术信息

3.2.4

如果您需要更多信息或讨论它,请免费!感谢您的帮助!

java spring-boot spring-security configuration spring-el
1个回答
0
投票
  1. 如果您使用自定义

    MethodSecurityExpressionHandler
    ,请确保您使用
    @EnableMethodSecurity(prePostEnabled = true)

  2. 但是函数 T() 无法解析类 Permissions。

    然后你使用: .registerImport(PermissionName.class.getPackage().getName());

© www.soinside.com 2019 - 2024. All rights reserved.