Условное выполнение метода с использованием Аспектов в Spring AOP - PullRequest
0 голосов
/ 19 октября 2018

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

@Before("some pointcut")
public HttpStatus checkUserAuthentication(String userName)
{
   if( userAuthorized(userName) )
   {
       //go on executing method
   } else {
      return HttpStatus.FORBIDDEN; 
   } 
}

Есть ли альтернатива для ProceedingJoinPoint.proceed при использовании JoinPoint или я могу использовать ProceedingJoinPoint с советом @Before?Как продолжить выполнение оператора if, если пользователь авторизован.

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Я решил это с помощью @Around совета.и изменив тип возвращаемого значения на Object, чтобы он мог возвращать ProceedingJoinPoint при успешной проверке.

@Around("some pointcut")
public Object checkUserAuthentication(ProceedingJoinPoint pjp, String userName)
{
   if( userAuthorized(userName) )
   {
       return pjp.roceed();
   } else {
      return new ResponseEntity<>(HttpStatus.FORBIDDEN); 
   } 
}

с использованием @Around в качестве рекомендации, элемент управления может быть передан методу после проверки.

0 голосов
/ 19 октября 2018

У вас есть хорошее предположение, что безопасность - это сквозная проблема .Что отражает сам AOP.

Существует модуль Spring под названием Spring Security , который управляет аутентификацией и авторизацией.В некоторых частях это реализовано с помощью AOP:)

Есть что-то именно то, что вы ищете, это называется Spring Method Security .Я оставлю пример, но для получения дополнительной информации, пожалуйста, обратитесь к LINK

@RolesAllowed({ "ROLE_VIEWER", "ROLE_EDITOR" })
public boolean isValidUsername2(String username) {
    //...
}
...