在 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() {}
注释标记了应该应用方面的所有方法。Aspect 检查授权并抛出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 错误吗?