0

Eclipse + AJDT では、以下のように認可をチェックするメソッド アノテーションを実装しました。

注釈:

@Retention(RetentionPolicy.RUNTIME)
public @interface Secured {}

側面:

public aspect SecurityCheck {
  pointcut checkSecurity(Secured annotation) : execution(@Secured * *.*(..)) && @annotation(annotation);

  Object around(Secured annotation) throws PermissionException:
    checkSecurity(annotation) {
    ...
    if (...) throw new PermissionException();
    ...
    return proceed(annotation);
  }
}

使用法:

@Secured
public void someMethod() {}

注釈は、アスペクトを適用する必要があるすべてのメソッドをマークします。アスペクトは承認をチェックし、失敗するとスローPermissionExceptionします。

ただし、これはチェック例外であるsomeMethod()ため、宣言する必要があります。

@Secured
public void someMethod() throws PermissionException {}

Eclipse はこれを好まない: 内部someMethod()に throw するものが何もないPermissionExceptionので、不平を言う。回避策を実行する必要があります:

@Secured
public void someMethod() throws PermissionException {
  warn();
}

@SuppressWarnings("unused")
public static void warn() throws PermissionException {}

これは Eclipse を満足させ、問題なく動作します。warn()しかし、 Eclipse をシャットダウンさせるためだけに毎回呼び出すのは非常に見苦しいです。

何がもっとうまくできるでしょうか?これは単純な Eclipse のバグですか?

4

1 に答える 1

0

ここで修正されていないバグ (https://bugs.eclipse.org/bugs/show_bug.cgi?id=240608) に遭遇したと思います。

チェック例外にする必要がありますか?

于 2012-11-29T08:53:30.650 に答える