私の前の質問のこのコメントをフォローアップします。@Around
アドバイスから例外をスローし、呼び出し先クラスおよび/またはメソッド内でキャッチしようとしています。しかし、私はこのエラーが発生しています:
Stacktraces
java.lang.Exception: User not authorized
com.company.aspect.AuthorizeUserAspect.isAuthorized(AuthorizeUserAspect.java:77)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:616)
...
アスペクトコードは次のとおりです。
@Aspect
public class AuthorizeUserAspect {
@AuthoWired
private UserService service;
@Pointcut("@annotation(module)")
public void authorizeBeforeExecution(AuthorizeUser module) {}
@Around(value = "authorizeBeforeExecution(module)", argNames="module")
public Object isAuthorized(ProceddingJoinPoint jp, AuthorizeUser module) throws Throwable {
// Check if the user has permission or not
service.checkUser();
if ( /* User has NOT permission */ ) {
throw new MyCustomException("User not authorized"); // => this is line 77
}
return jp.proceed();
}
}
Struts ベースの UI アクション コードは次のとおりです。
@Component
public class DashboardAction extends ActionSupport {
@Override
@AuthorizeUser
public String execute() {
...
}
private void showAccessDenied() {
...
}
}
問題は、その例外をキャッチして実行する方法または場所showAccessDenied()
です。