在自定义注释中使用spring security表达式

时间:2016-09-02 21:17:01

标签: spring-security aspectj

您好我有一个Spring boot + Spring Security项目。 我正在构建一个我定义的自定义注释:

@Retention(RUNTIME)
@Target(METHOD)
public @interface CustomAnnotation {
   String condition();
   String[] fields() default {};
}

此注释将应用于课程'方法。我想要"条件"参数是一个弹簧安全表达式'我将在评估表达式的方面进行评估,如果是真的,它将做一些逻辑。

方面定义如下:

@Pointcut("@annotation(customAnnotation)"  )
public void pointcutForCustomAnnotation(CustomAnnotation  customAnnotation) {
// Do nothing.
}

@Around("pointcutForCustomAnnotation(customAnnotation)")
public Object customAspect(ProceedingJoinPoint pjp, CustomAnnotation customAnnotation) throws Throwable   {
     // Here should go the logic to evaluate spring security expression
    String condition = customAnnotation.condition();
    String[] fieldsToHide = customAnnotation.fields();
}

当我指的是Spring安全表达式时,我指的是@Preauthorize,@ PostAuthorize,@ PreFilter @PostFilter spring注释中使用的表达式。 例如:

hasRole('ROLE_USER')
isAuthenticated()

如何评估方面的弹簧安全表达式?我想我可以很容易地采用完成这项工作的类i spring框架

1 个答案:

答案 0 :(得分:0)

以下要点可以指出:

Programmatically check Spring Security expressions

对Grails来说,同样的问题对我有所帮助。 (我必须更改表达式查找器查找)