Ser*_*hez 8 spring annotations spring-mvc spring-security spring-el
我需要在多个控制器上实现授权表达式.为此,我决定创建一个便于其使用的个性化注释.问题是授权表达式需要一个参数(一个id),可以在每个控制器中以不同的方式获得.然后
我把注释:
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@PreAuthorize("@authorizationService.hasAdminRole() || ( @authorizationService.hasParentRole() && @authorizationService.isYourSon(#son) )")
public @interface OnlyAccessForAdminOrParentOfTheSon {
String son() default "";
}
Run Code Online (Sandbox Code Playgroud)
问题是我不知道如何获取要在SPEL授权表达式中使用的注释的"son"属性的值.
我使用的符号如下:
@OnlyAccessForAdminOrParentOfTheSon(son = "#id")
@OnlyAccessForAdminOrParentOfTheSon(son = "#socialMedia.son")
Run Code Online (Sandbox Code Playgroud)
有人知道如何解决这个问题.提前致谢.
你不能这样实现,但是 spring Security 方法允许轻松定义一些自定义授权规则。这些规则可以授予或拒绝特定用户的某些操作。
您需要创建一个自定义服务/组件,它将根据您的要求使用 @PreAuthorize 注释和表达式来验证请求。
public interface CustomAuthorization {
boolean onlyAccessForAdminOrParentOfTheSon(final UserDetails principal, final long id) ;
}
Run Code Online (Sandbox Code Playgroud)
执行 :
@Component("customAuthorization")
public final class CustomAuthorizationImpl implementes CustomAuthorization {
@Override
public boolean onlyAccessForAdminOrParentOfTheSon(final UserDetails principal, final long id) {
return // add you authentication condition;
}
}
Run Code Online (Sandbox Code Playgroud)
现在您可以将它与 @PreAuthorize 注释和表达式一起使用
@Service
public final class HelloService {
@PreAuthorize("@customAuthorization.onlyAccessForAdminOrParentOfTheSon(principal, #id)")
public String testMe(String id) {
return "test successfully";
}
}
Run Code Online (Sandbox Code Playgroud)
您可以将它与服务/控制器操作一起使用,也可以根据您的要求修改参数。
| 归档时间: |
|
| 查看次数: |
719 次 |
| 最近记录: |