您可以基于Spring
@PreAuthorize("")构造实现自己的方法安全注释。要将有关方法的其他信息(方法参数值之外)获取到SpEL评估上下文,您可以实现自己的MethodSecurityexpressionHandler
@Servicepublic class MySecurityexpressionHandler extends DefaultMethodSecurityexpressionHandler { @Override public StandardevaluationContext createevaluationContextInternal( Authentication auth, MethodInvocation mi) { StandardevaluationContext evaluationContext = super .createevaluationContextInternal(auth, mi); SomeMethodInfoData methodInfoData = mi.getMethod(). ...; evaluationContext.setVariable("someData", <value computed based on method info data>); } return evaluationContext;}并在您的
global-method-security声明中注册
<security:global-method-security pre-post-annotations="enabled"> <security:expression-handler ref="mySecurityexpressionHandler" /> </security:global-method-security>
现在,您可以创建自定义安全注释(如果需要,还可以在MySecurityexpressionHandler中创建额外的过程注释数据)
@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@PreAuthorize("#<someData>")public @interface CustomSecurityAnnotation { ... }例如,您可以创建一个自定义注释来检查用户角色而不会弄乱字符串:
@MyUserRoleCheck(MyAppRole.Admin)public void someMethod()



