我使用的是Spring Security 3.1.0.RC3,因为3.1中引入了使用枚举权限保护方法的可能性。
这是我的注释:
public @interface SecuredEnum
{
public PrivilegeEnum[] value();
}
以下是我如何使用它:
import static somepath1.PrivilegeEnum.SOME_PRIV1;
public interface MyService extends BaseService {
@SecuredEnum(SOME_PRIV1)
void insertOrUpdateMyObject(MyObject myObject);
}
javac每次都正确编译此代码,但是eclipse(Indigo SR1)编译器在Project之后出现错误 - >清洁:
The attribute value is undefined for the annotation type SecuredEnum
并建议快速修复:
Create attribute 'value()'
所以这是我的解决方法:我应用此修复程序,并注释注释中的数组字段:
public @interface SecuredEnum
{
// public PrivilegeEnum[] value();
public PrivilegeEnum value();
}
之后,eclipse正确编译所有类(除了@SecuredEnum具有两个或更多权限的那些类)。下一步是取消注释旧数组字段并删除快速修复创建的新字段。结果,一切都完美编译。 因此,每次清理项目时都会非常烦人。另一个问题是我无法通过示例项目重现此问题,因此可能在此问题文本中缺少一些重要信息。 这是谁的错误,怎么可能修复它?
更新: 既不在注释参数中使用显式数组(即添加{}括号),也不显式定义参数名称('值'),也不使用完全限定的枚举值而不是静态导入帮助
答案 0 :(得分:0)
保留政策可能存在问题,您尚未在自定义注释中定义该政策。因此保留策略默认为class。它应该是运行时,至少是Spring Security人员用于@Secured注释的内容。
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface SecuredEnum {
public PrivilegeEnum[] value();
}
答案 1 :(得分:0)
使用Eclipse Juno(4.2)我只需要更改(插入空白,删除空白)并使用误报保存文件以消除“未定义值”错误。
每次我更改编译器设置时,我都必须这样做一次,但直到那时它才消失......