快速上手-权限校验

本节中将会介绍如何通过注解进行权限校验

注解详解

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface SimpleValidate {
    //用于校验的类(validateObj),类中用于校验的函数返回值必须为Boolean
    Class<?> value() default Object.class;
    //用于校验的函数名
    String[] methods() default {"validate"};
    //验证失败后的拒绝策略,默认策略抛出ValidateException
    Class<? extends ValidateRejectedStratagem> rejected() default DefaultValidateRejectedStratagem.class;
}

注解用法

value参数传入用于校验的类。
类中用于校验的函数返回值必须为Boolean,参数为需要校验的类。
例:public Boolean fillUser(User user);

public class MyValidateObj {
    //验证用户年龄为1-99
    public Boolean fillUser(User user){
        final Integer age = user.getAge();
        if (age <= 1 || age >= 99){
            return false;
        }
        return true;
    }
}

在Controller中添加注解

@RestController
public class MyController {
    @GetMapping("/say")
    @SimpleValidate(value = MyValidateObj.class, methods = {"fillUser"})
    public String say(User user){
        return user.getName();
    }
}

若多个函数需要用到同一个校验类可将校验类写在类注解中。当类的注解上指定了验证类

@RestController
@SimpleValidate(value = MyValidateObj.class)
public class MyController {

    @GetMapping("/say")
    @SimpleValidate(methods = {"fillUser"})
    public String say(User user){
        System.out.println("say");
        return user.getName();
    }

    @GetMapping("/eat")
    @SimpleValidate(methods = {"partUser"})
    public String eat(User user){
        System.out.println("eat");
        return user.getName();
    }
}

拒绝策略

默认的拒绝策略为抛出ValidateException

public class MyRejected implements ValidateRejectedStratagem {
    @Override
    public void doRejected(HttpServletRequest request, HttpServletResponse response, Object validationObj) {
    }
}

当验证类返回false时运行doRejected函数,
validationObj为验证的对象,如当验证User对象验证失败返回false后,doRejected中的validationObj为刚刚验证的User。