添加数据库中的where子句

时间:2011-07-12 09:56:12

标签: java spring aop mybatis

我们正在使用MyBatis 3.0.3&我们项目中的Spring 3.0.5。

我们正在尝试通过存储where子句的表(userid< 200,active == true,...)来实现数据级安全性。

因此,当我们想要在执行时间内以条件方式向select查询添加子句时,问题就出现了。

我们正在考虑使用Spring AOP的可能性,但我们不确定它是否可行,如果它是一个很好的解决方案,并且我们不知道如何实现它。

请分享您的想法。

提前致谢,

西尔维娅。

1 个答案:

答案 0 :(得分:0)

我认为这是可能的。实现服务层,以便您可以通过安全上下文(Spring安全性)获取用户(userID),或者您也可以将用户作为服务层方法中的参数。

可能的Aspect实现的一个示例:

@Aspect
public class MyAspect {

   @Pointcut("within(my.package.MyClass)")
   public void pointcutClass() {
   }

   @Pointcut("execution(* create*(..))")
   public void pointcutMethod() {
   }

   @Pointcut("pointcutClass() && pointcutMethod()")
   public void myPointcut() {
   }

   @Before("myPointcut()")
   public void checkAuthorization(final JoinPoint joinPoint) {

    // Fetch User via spring security:
     Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
     if (principal == null)
        throw new Exception("No principal found");
     if (!(principal instanceof User)) {
        throw new Exception("principal is not a User");
     }
     User user = (User) principal;

     // Or fetch User via the joinPoint:
     Object[] args = joinPoint.getArgs();
     User user = (User) args[0]

     if (user.getUserId == null || user.getUserId > 200)
        throw new Exception("User is not authorised.");
}