本家はこちら
下記のようにcontrollerでのリクエストのログを認証情報付きで出力しようとする。
@AfterReturning(value = "execution(* xxx.xxx.controller..*.*(..))")
public void execNormalControllerMethod(JoinPoint jp) {
/// ログ出力処理
}
しかし、下記のように、@PreAuthorize
するとエラーになる。
@RestController
@RequestMapping("sample")
public class SampleController {
@RequestMapping
@PreAuthorize("hasAuthority('ADMIN_ROLE')")
public Mono index(@AuthenticationPrincipal UserDetails useDetails) {
return Mono.empty();
}
}
エラーは下記
No MethodInvocation found: Check that an AOP invocation is in progress, and that the ExposeInvocationInterceptor is upfront in the interceptor chain. Specifically, note that advices with order HIGHEST_PRECEDENCE will execute before ExposeInvocationInterceptor!
下記にて対処可能
@EnableReactiveMethodSecurity
のOrderを最上位にすれば動作する
@EnableReactiveMethodSecurity(order = Ordered.HIGHEST_PRECEDENCE)
以上、設定して再起動すればOK