自定义注解实现登陆校验

这篇博客介绍了如何在Java应用中通过自定义注解实现登录校验,包括定义拦截器规则和添加自定义拦截器的方法。

通常拦截器类可以通过两种方式来定义:
1.实现HandlerInterceptor接口或继承HandlerInterceptor接口的实现类(如HandlerInterceptorAdapter)来定义
2.通过实现WebRequestInterceptor接口,或继承WebRequestInterceptor接口的实现类来定义。

   以实现HandlerInterceptor接口方式为例
    a.preHandle():在控制器方法前执行,其返回值表示是否中断后续操作。当其返回值为true时,表示继续向下执行,当其				返回值为false时,会中断后续的所有操作(包括调用下一个拦截器和控制器类中的方法执行等)。
    b.postHandle():在控制器方法调用之后解析视图之前执行。可以通过此方法对请求域中的模型和视图做出进一步的修改。
    c.afterCompletion():在整个请求完成,即视图渲染结束之后执行。可以通过此方法实现一些资源清理、记录日志信息等

自定义注解

    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface Login {
   
   
        /**
         *  登录校验
         * @return true 校验 false 不校验
         */
        boolean value() default true;
    }

自定义拦截器处理规则

    @Slf4j
    @Component
    public class UserLoginInterceptor implements HandlerInterceptor {
   
   
    
    	@Autowired
    
### Java自定义注解实现参数校验的功能 在Java开发中,通过自定义注解可以灵活地满足复杂的业务需求。以下是基于提供的引用内容以及标准实践的一个完整示例。 #### 创建自定义注解 首先需要定义一个注解类,并指定其作用范围和生命周期。以下是一个名为`@State`的自定义注解: ```java package com.example.validate; import javax.validation.Constraint; import javax.validation.Payload; import java.lang.annotation.*; @Documented @Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER}) @Retention(RetentionPolicy.RUNTIME) @Constraint(validatedBy = StateValidator.class) // 验证器类 public @interface State { String value(); // 定义允许的状态值列表 String message() default "Invalid state"; // 默认错误提示信息 Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; } ``` 此部分展示了如何创建一个简单的自定义注解[@State],它能够接收一组合法状态作为输入并提供默认的消息处理机制[^1]。 #### 编写验证逻辑 接着需编写具体的验证逻辑,即实现`javax.validation.ConstraintValidator<A,T>`接口。这里以检查整数类型的字段是否属于预设的一组有效状态为例: ```java package com.example.validate; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import java.util.Arrays; import java.util.List; public class StateValidator implements ConstraintValidator<State, Integer> { private List<Integer> allowedStates; @Override public void initialize(State constraintAnnotation) { this.allowedStates = Arrays.asList(constraintAnnotation.value().split(",")) .stream() .map(Integer::parseInt) .toList(); } @Override public boolean isValid(Integer value, ConstraintValidatorContext context) { if (value == null || allowedStates.contains(value)) { return true; } return false; } } ``` 上述代码片段实现了对传入数值的合法性判断过程,其中初始化方法负责解析配置好的可接受状态集合;而有效性检测函数则依据当前实例属性决定是否符合预期条件[^2]。 #### 使用自定义注解 最后可以在实体类或者控制器层的方法签名上运用该注解来进行约束声明: ```java public class OrderRequest { @State("0,1") // 只能取值为0或1 private int orderStatus; // Getter and Setter omitted... } // 或者应用于Controller中的请求参数 @RestController @RequestMapping("/orders") public class OrderController { @PostMapping("/{id}") public ResponseEntity<String> updateOrder(@PathVariable Long id, @RequestBody @Valid OrderRequest request){ // Business logic here ... return ResponseEntity.ok("Success"); } } ``` 以上例子说明了怎样利用Spring框架下的自动注入特性配合Hibernate Validator完成基本的数据完整性检验工作流程^。 --- 问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值