Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring不进入自定义验证器_Java_Spring_Spring Boot_Acl_Spring Validator - Fatal编程技术网

Java Spring不进入自定义验证器

Java Spring不进入自定义验证器,java,spring,spring-boot,acl,spring-validator,Java,Spring,Spring Boot,Acl,Spring Validator,我添加了4个自定义验证器,以便在控制器中进行一些检查。其中3个正在工作,但有效目标身份一个不工作 这是我的constraint-mapping.xml <constraint-mappings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation

我添加了4个自定义验证器,以便在控制器中进行一些检查。其中3个正在工作,但
有效目标身份
一个不工作

这是我的constraint-mapping.xml

<constraint-mappings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                     xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/mapping validation-mapping-1.1.xsd"
                     xmlns="http://jboss.org/xml/ns/javax/validation/mapping" version="1.1">

    <bean class="org.springframework.security.acls.domain.AccessControlEntryImpl" ignore-annotations="true">
        <field name="sid">
            <constraint annotation="javax.validation.constraints.NotNull"/>
            <constraint annotation="package.validation.SidExists"/>
            <constraint annotation="package.validation.NonMatchingSid"/>
        </field>
        <field name="acl">
            <constraint annotation="javax.validation.constraints.NotNull"/>
        </field>
    </bean>

    <bean class="org.springframework.security.acls.domain.AclImpl">
        <field name="objectIdentity">
            <constraint annotation="javax.validation.constraints.NotNull"/>
            <constraint annotation="package.validation.ValidObjectIdentity"/>
        </field>
    </bean>

    <bean class="package.AccessControlEntryController">
        <method name="create">
            <parameter type="org.springframework.security.acls.model.AccessControlEntry">
                <constraint annotation="package.validation.ValidEntry"/>
            </parameter>
        </method>
    </bean>
</constraint-mappings>
为了便于参考,我将在这里介绍
AccessControlEntryImpl
AclImpl

public class AccessControlEntryImpl implements AccessControlEntry, AuditableAccessControlEntry {

    private final Acl acl;
    private Permission permission;
    private final Serializable id;
    private final Sid sid;
    private boolean auditFailure = false;
    private boolean auditSuccess = false;
    private final boolean granting;

}

我知道您希望在验证
AccessControlEntryImpl
时激发
ValidObjectIdentity

默认情况下不会进行级联验证。对于相应的XML映射,您需要在
AccessControlEntryImpl.acl
上添加
@Valid
注释或
节点:

<field name="acl">
    <valid/>
</field>

public class AclImpl implements Acl, MutableAcl, AuditableAcl, OwnershipAcl {
    private Acl parentAcl;
    private transient AclAuthorizationStrategy aclAuthorizationStrategy;
    private transient PermissionGrantingStrategy permissionGrantingStrategy;
    private final List<AccessControlEntry> aces = new ArrayList<>();
    private ObjectIdentity objectIdentity;
    private Serializable id;
    private Sid owner; // OwnershipAcl
    private List<Sid> loadedSids = null;
}
@Target(value = ElementType.FIELD)
@Retention(value = RetentionPolicy.RUNTIME)
@Constraint(validatedBy = ValidObjectIdentityValidator.class)
public @interface ValidObjectIdentity {

    String message() default "{package.ValidObjectIdentity.message}";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}

public class ValidObjectIdentityValidator implements ConstraintValidator<ValidObjectIdentity, ObjectIdentity> {

    @Override
    public boolean isValid(ObjectIdentity identity, ConstraintValidatorContext context) {
      // Logic
    }
}
<field name="acl">
    <valid/>
</field>