相关疑难解决方法(0)

使用枚举类型作为@ RolesAllowed-Annotation的值参数

我正在开发一个Java企业应用程序,目前正在使用Java EE安全性来限制特定用户对特定功能的访问.我配置了应用程序服务器和所有内容,现在我使用RolesAllowed-annotation来保护方法:

@Documented
@Retention (RUNTIME)
@Target({TYPE, METHOD})
public @interface RolesAllowed {
    String[] value();
}
Run Code Online (Sandbox Code Playgroud)

当我使用这样的注释时,它工作正常:

@RolesAllowed("STUDENT")
public void update(User p) { ... }
Run Code Online (Sandbox Code Playgroud)

但这不是我想要的,因为我必须在这里使用String,重构变得困难,并且可能发生拼写错误.因此,我想使用Enum值作为此注释的参数,而不是使用String.Enum看起来像这样:

public enum RoleType {
    STUDENT("STUDENT"),
    TEACHER("TEACHER"),
    DEANERY("DEANERY");

    private final String label;

    private RoleType(String label) {
        this.label = label;
    }

    public String toString() {
        return this.label;
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我尝试使用Enum作为这样的参数:

@RolesAllowed(RoleType.DEANERY.name())
public void update(User p) { ... }
Run Code Online (Sandbox Code Playgroud)

但是后来我得到了以下编译器错误,虽然Enum.name只返回一个String(它总是不变的,不是吗?).

注释属性RolesAllowed.value的值必须是常量表达式`

我尝试的下一件事是在我的枚举中添加一个额外的最终字符串:

public enum RoleType {
    ...
    public static final String STUDENT_ROLE = STUDENT.toString();
    ...
}
Run Code Online (Sandbox Code Playgroud)

但这也不能作为参数,导致相同的编译器错误:

// The …
Run Code Online (Sandbox Code Playgroud)

java enums annotations java-ee java-ee-6

55
推荐指数
4
解决办法
3万
查看次数

标签 统计

annotations ×1

enums ×1

java ×1

java-ee ×1

java-ee-6 ×1