2016-09-02 5 views
1

Привет, У меня есть проект с Spring boot + Spring Security. Я строй пользовательских аннотаций, которые я определил, как это:Используйте выражения весенней безопасности в пользовательской аннотации

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

Этой аннотация будет применяться по методам классов. Я хочу, чтобы параметр «condition» был «выражением безопасности пружины», которое я буду оценивать в аспекте, который будет оценивать выражение, и если он истинен, он будет делать некоторую логику.

Аспект определяется следующим образом:

@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 пружинных аннотациями. Например:

hasRole('ROLE_USER') 
isAuthenticated() 

Как я могу оценить выражение безопасности пружины в аспекте? Я предполагаю, что я мог бы легко взять рамки пружинного класса я, что делает эту работу

ответ

0

Следующей сути может быть точка для начала:

Programmatically check Spring Security expressions

Он работал для меня с некоторой adations для тех же проблем Grails. (Мне пришлось изменить выражение поиска Handler)