使用@PreAuthorize 时,Spring SpelExpression

我正在尝试使用 @PreAuthorize 但需要将其配置为使不同的环境具有不同的访问权限,但是当我尝试使用 @PreAuthorize("hasAuthority(#bean)") 时,没有任何内容被读取到权限中。


我试过使用#bean 和@bean,但都没有用,但如果我有一个硬编码字符串,它就可以正常工作。当使用#bean 时,没有任何内容被传入,而当使用@bean 时,我得到 No bean resolver registered in the context to resolve access to bean 'readRole'


    @Bean

    public String readRole() {

        return "Domain Users";

    }


    @Target({ ElementType.METHOD, ElementType.TYPE })

    @Retention(RetentionPolicy.RUNTIME)

    @PreAuthorize("hasAuthority(@readRole)")

    public @interface UserCanSeeRestricted { }

然后在我的休息控制器中:


    @SecurityConfigExample.UserCanSeeRestricted

    @GetMapping("/all")

    public Collection<Office> getAllOffices()

    {

        return officeService.getAll();

    }

我希望能够使用 readRole 根据环境返回不同的组,并让 @PreAuthorize 读取它们


我尝试了什么:


public class SecurityConfig {

        public String readRole = "Domain Users";

    }

    @Bean

    public SecurityConfig readRole() {

        return new SecurityConfig();

    }


    @Target({ ElementType.METHOD, ElementType.TYPE })

    @Retention(RetentionPolicy.RUNTIME)

    @PreAuthorize("hasAuthority(@readRole.readRole)")

    public @interface UserCanSeeRestricted { }

--- 第二次更新:


    public class SecurityConfig {

        public String readRole() {

            return "Domain Users";

        }

    }

    @Bean

    public SecurityConfig readRole() {

        return new SecurityConfig();

    }


    @Target({ ElementType.METHOD, ElementType.TYPE })

    @Retention(RetentionPolicy.RUNTIME)

    @PreAuthorize("hasAuthority(@readRole.readRole())")

    public @interface UserCanSeeRestricted { }

我试着更换


    @SecurityConfigExample.UserCanSeeRestricted



@PreAuthorize("hasAuthority(@readRole.readRole())")

但它没有用


慕标5832272
浏览 85回答 1
1回答

波斯汪

我找到的解决方案是:@Target({ ElementType.METHOD, ElementType.TYPE })@Retention(RetentionPolicy.RUNTIME)@PreAuthorize("hasAnyAuthority(#root.getThis().getProps().getWriteRole())")public @interface UserCanEditRestricted { }我的每个控制器都必须有一个存储角色的道具对象。这样角色是可配置的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java