У меня есть несколько функций контроллера, разделенных по ролям, и вместо того, чтобы выполнять проверку роли в каждом методе контроллера, я обнаружил, что кажется, что он может быть выполнен с помощью Aspect, однако что-то не так в моей реализации как код в аспекте никогда не запускается
Аннотация:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ForMerchantOnly {}
Формат:
@Aspect
@Configuration
public class ForMerchantOnlyAspect {
private static final Logger logger = LogManager.getLogger(ForMerchantOnlyAspect.class);
@Before("@annotation(com.example.api.annotation.ForMerchantOnly) && args(request)")
public void before(HttpServletRequest request) throws ServiceException {
if (!(request instanceof HttpServletRequest)) {
throw new RuntimeException("request should be HttpServletRequesttype");
}
String domain = request.getServerName();
System.out.println("Aspect showing domain " + domain);
// -- other code
}
}
Контроллер
@ForMerchantOnly
@GetMapping("/list")
public ResponseEntity<ApiResp> list() {
System.out.println("Show something");
return ResponseEntity.ok().body();
}
Я предполагаю, когда я вызываю контроллер / list метод через chrome браузер, он попадет в код в ForMerchantOnlyAspect
, но он просто войдет в метод контроллера напрямую. Я что-то упустил?