我正在尝试使用@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())")
它不起作用
答案 0 :(得分:0)
我找到的解决方案是:
@Target({ ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@PreAuthorize("hasAnyAuthority(#root.getThis().getProps().getWriteRole())")
public @interface UserCanEditRestricted { }
我的每个控制器都必须有一个props对象,用于存储角色。通过这种方式可以配置角色。