我正在尝试使用 @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 { }
我的每个控制器都必须有一个存储角色的道具对象。这样角色是可配置的。
添加回答
举报
0/150
提交
取消