为了账号安全,请及时绑定邮箱和手机立即绑定

使用@PreAuthorize 时,Spring SpelExpression

使用@PreAuthorize 时,Spring SpelExpression

慕标5832272 2022-11-30 14:37:40
我正在尝试使用 @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())")但它没有用
查看完整描述

1 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

我找到的解决方案是:


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

@Retention(RetentionPolicy.RUNTIME)

@PreAuthorize("hasAnyAuthority(#root.getThis().getProps().getWriteRole())")

public @interface UserCanEditRestricted { }

我的每个控制器都必须有一个存储角色的道具对象。这样角色是可配置的。


查看完整回答
反对 回复 2022-11-30
  • 1 回答
  • 0 关注
  • 84 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信