2016-01-22 6 views
0

Мне нужно сделать некоторые проверки перед исполнением @ Модификация запросов, таких как обновление, вставка, удаление. Есть ли способ сделать это на уровне репозитория? (Возможно, с аннотацией). Я ищу фильтр, который должен выполняться каждый раз, когда выполняется запрос, и решить, должен ли выполняться запрос или нет для всех файлов моего репозитория.Java JPA filter

Спасибо

+0

в целях безопасности? –

+0

не только для безопасности ... – magemello

ответ

1

Вы можете использовать AspectJ для перехвата вызовов методов на JPA хранилищ.

Шаг 1: Объявите свои репозитории JPA, как обычно.

Этап 2: необязательно аннотируйте интересующие методы хранилища.

Этап 3: Объявите аспект, чтобы перехватить метод, вызывающий интерес, в репозиториях JPA. См. this Aspect из моего примера приложения в качестве примера.

Этап 4: Включить перехват времени выполнения в конфигурации Spring. См. the XML Spring configuration file из той же примерной заявки, что и в примере.

+0

Да, правильно и не забудьте выбросить исключение, если вы хотите предотвратить выполнение отфильтрованного метода ... – magemello

0

Это фрагмент кода, чтобы проверить, если @Modifying аннотацию присутствует и прервать выполнение с Exception:

@Component 
@Aspect 
public class InterceptModify { 

    @Before("execution(* org.example.repository.*.*(..))") 
    public void intercept(JoinPoint joinPoint) { 
     MethodSignature signature = (MethodSignature) joinPoint.getSignature(); 
     Annotation[] annotations = signature.getMethod().getAnnotations(); 

     for (Annotation annotation : annotations) { 
      if (annotation.annotationType().equals(Modifying.class)) { 
       throw new RuntimeException(); 
      } 
     } 
    }} 

также Remeber чтобы включить AspectJ с аннотацией @EnableAspectJAutoProxy в одном из вашего класса конф