Добавление предложений where из базы данных - PullRequest
0 голосов
/ 12 июля 2011

Мы используем MyBatis 3.0.3 и Spring 3.0.5 в нашем проекте.

Мы пытаемся реализовать защиту на уровне данных с помощью таблицы, в которой хранятся предложения where (userid <200, active == true, ...). </p>

Итак, проблема возникает, когда мы хотимдобавить предложение в запрос на выборку динамически во время выполнения.

Мы думаем о возможности использования Spring AOP, но не уверены, возможно ли это или нет, если это хорошее решение, и исходить изчто мы не знаем, как это реализовать.

Пожалуйста, поделитесь своими мыслями.

Заранее спасибо,

Сильвия.

1 Ответ

0 голосов
/ 13 февраля 2012

Я думаю, что это возможно.Реализуйте сервисный уровень, чтобы вы могли выбрать пользователя (userID) через контекст безопасности (Spring security) или вы также можете указать пользователя в качестве параметра в ваших методах сервисного уровня.

Пример возможной реализации 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.");
}
...