Spring AOP:带注释的方法在方面不被忽略

时间:2019-01-24 15:02:44

标签: java spring hibernate aop multi-tenant

我遇到以下问题...我想使用Hibernate筛选器来筛选特定于租户的数据。我实现了AOP方面(Spring AOP)以在将查询发送到数据库服务器之前启用筛选器。那很完美。但是,在某些情况下,应禁用此过滤功能(登录,检索车辆制造商等)。因此,我将切入点扩展如下:

 @Before("!@annotation(com.example.persistence.DisableTenantFilter) && " +
        "execution(* com.example.persistence.repository.*.*.*(..))")
 public void applyFilter(JoinPoint joinPoint) {}

应该为存储库子包BUT中所有类中的所有方法触发该方面,而不是为那些用 @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);
}

知道我在做什么错吗?

0 个答案:

没有答案