我正在使用带有 @Secured 的 Deltaspike (1.0.3) 安全模块(允许集成第 3 方安全框架的功能)。当我在类级别仅使用一个注释(SecurityBinding)时运行良好。当我在同一个类上添加第二个注释时,第二个 securityBinding 的 CustomAccessDecisionVoter 永远不会被调用。正如我理解的 api - 可能在类级别上有多个注释,但在我的情况下不起作用。我做错了什么?
这就是我声明 SecurityBinding 的方式:
@Retention(value = RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
@Documented
@Stereotype
@Secured(AnnotationOneAccessDecisionVoter.class)
public @interface AnnotationOne {
}
这是 AnnotationOne 的自定义 AccessDecisionVoter:
@ApplicationScoped
public class AnnotationOneAccessDecisionVoter implements AccessDecisionVoter {
public Set<SecurityViolation> checkPermission(AccessDecisionVoterContext voterContext) {
Set<SecurityViolation> violations = new HashSet<SecurityViolation>(1);
if(some validation...) {
violations.add(new SecurityViolation() {
private static final long serialVersionUID = ...;
@Override
public String getReason() {
return "...";
}
});
最后是豆子:
@Named("...")
@ViewScoped
//Permission
@AnnotationOne
@AnnotationTwo
public class Bean implements Serializable {...}