У меня следующая проблема ... Я хочу использовать фильтр Hibernate для фильтрации специфичных для арендатора данных. Я реализовал аспект AOP (Spring AOP), чтобы включить фильтр непосредственно перед отправкой запросов на сервер базы данных. Это работает просто отлично. Однако существуют ситуации, когда фильтрация должна быть отключена (вход в систему, поиск производителей транспортных средств и т. Д.). Итак, я расширил свой pointcut следующим образом:
@Before("!@annotation(com.example.persistence.DisableTenantFilter) && " +
"execution(* com.example.persistence.repository.*.*.*(..))")
public void applyFilter(JoinPoint joinPoint) {}
Аспект должен запускаться для всех методов во всех классах в подпакете репозитория, НО не для тех методов, которые отмечены @ DisableTenantFilter . В настоящее время этот аспект запускается также для тех методов, которые отмечены этой аннотацией.
Пример репозитория (в этом случае аспект не должен выполняться):
@Repository
public interface UserRepository extends BaseRepository<User, Long> {
@DisableTenantFilter
@Query("SELECT u FROM User u WHERE u.username=:username")
User retrieveByUsernameForLogin(@Param("username") String username);
}
Есть идеи, что я делаю не так?