私は次のコードを持っています
public Object handlePermission(ProceedingJoinPoint joinPoint, RequirePermission permission) throws AccessException, Throwable {
System.out.println("Permission = " + permission.value());
if (user.hasPermission(permission.value())) {
System.out.println("Permission granted ");
return joinPoint.proceed();
} else {
System.out.println("No Permission");
throw new AccessException("Current user does not have required permission");
}
}
権限のないユーザーを使用すると、Java.lang.reflect.UndeclaredThrowableException
の代わりにAccessException
。
AccessException
はチェック済みの例外ですが、throws
句で宣言されていないメソッドからスローされました(実際には、そのメソッドをインターセプトするアスペクトから)。これはJavaの異常な状態であるため、例外はUndeclaredThrowableException
でラップされており、チェックされていません。
例外をそのまま取得するには、アスペクトによってインターセプトされるメソッドのthrows
句で宣言するか、RuntimeException
の代わりに別の未チェックの例外(つまり、AccessException
のサブクラス)を使用します。