springboot 自定义注解拦截器

最近在工作中,发现自定义注解拦截使用起来特别方便,现在来写出来给大家看看

环境springboot

  1. 首先写一个自定义注解
package com.study.cdmy.common;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;/*** @Author 程达* @Description 在需要登录验证的Controller的方法上使用此注解* @Param* @Date  2019/4/9 11:29*/
@Target(ElementType.METHOD)// 可用在方法名上
@Retention(RetentionPolicy.RUNTIME)// 运行时有效
public @interface AccessRequired {
}
  1. 创建拦截器
package com.study.cdmy.interceptor;import com.study.cdmy.common.AccessRequired;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Method;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;/*** @Author 程达* @Description 登录拦截* @Param* @Date  2019/4/9 11:46*/
@Component
public class LoginInterceptor extends  HandlerInterceptorAdapter {private Logger logger = LoggerFactory.getLogger(LoginInterceptor.class);@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 如果不是映射到方法直接通过if (!(handler instanceof HandlerMethod)) {return true;}// ①:START 方法注解级拦截器HandlerMethod handlerMethod = (HandlerMethod) handler;Method method = handlerMethod.getMethod();// 判断接口是否需要登录AccessRequired methodAnnotation = method.getAnnotation(AccessRequired.class);// 有 @LoginRequired 注解,需要认证if (methodAnnotation != null) {// 这写你拦截需要干的事儿,比如取缓存,SESSION,权限判断等logger.info("该方法需要登录,请登录");return false;}return true;}@Overridepublic void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {}@Overridepublic void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {}
}

3.将拦截器添加到配置中,相当于spring-mvc.xml里的配置文件

package com.study.cdmy.config;import com.study.cdmy.interceptor.LoginInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;@Configuration
public class InterceptorConfig extends WebMvcConfigurerAdapter {@Overridepublic void addInterceptors(InterceptorRegistry registry) {// 多个拦截器组成一个拦截器链// addPathPatterns 用于添加拦截规则// excludePathPatterns 用户排除拦截registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**");super.addInterceptors(registry);}
}
  1. 创建一个controller类来测试
package com.study.cdmy.controller;import com.study.cdmy.common.AccessRequired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** @Author 程达* @Description 测试controller* @Param* @Date  2019/4/9 11:38*/
@RestController
@RequestMapping(value = "test")
public class TestController {/*** 加了拦截登录* @return*/@AccessRequired@RequestMapping("/login")public String login(){return "success";}/*** 没有加拦截登录* @return*/@RequestMapping("/login1")public String login1(){return "success1";}}
  1. 启动程序来测试

访问http://localhost:8080/test/login,log打印需要登录

访问http://localhost:8080/test/login1,直接返回数据

以上就是创建springboot自定义注解拦截器的全过程
码云源码–请看分支(自定义注解拦截器)

springboot 自定义注解拦截器相关推荐

  1. 自定义注解+拦截器优化项目代码

    自定义注解+拦截器的优势 类似用户权限或者接口限流的需求,但并不是所有操作或者接口需要.可以使用过滤器或者拦截器,但这样就必须在配置文件里加上所有方法或者使用通配符. 所以可以采用一种比较简单灵活的方 ...

  2. Springboot + redis + 注解 + 拦截器来实现接口幂等性校验

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:wangzaiplus www.jianshu.com/p/ ...

  3. springboot + redis + 注解 + 拦截器 实现接口幂等性校验

    点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 来源:https://www.jianshu.com/p/6189275403ed 一.概念 ...

  4. Springboot 自定义mybatis 拦截器,实现我们要的扩展

    前言 相信大家对拦截器并不陌生,对mybatis也不陌生. 有用过pagehelper的,那么对mybatis拦截器也不陌生了,按照使用的规则触发sql拦截,帮我们自动添加分页参数 . 那么今天,我们 ...

  5. 在SpringBoot项目中,自定义注解+拦截器优雅的实现敏感数据的加解密!

    在实际生产项目中,经常需要对如身份证信息.手机号.真实姓名等的敏感数据进行加密数据库存储,但在业务代码中对敏感信息进行手动加解密则十分不优雅,甚至会存在错加密.漏加密.业务人员需要知道实际的加密规则等 ...

  6. Springboot 自定义注解AOP实现时间参数格式转换

    前言 场景: 前端传过来的时间参数,我们后端自定义时间格式转化使用,想转成什么就转成什么. 不同业务场景,跟前端对接,一种控件基本时间参数是固定格式的,为了避免前端去转换时间参数的格式,跟前端约定好, ...

  7. springboot幂等性_Spring Boot + Redis + 注解 + 拦截器来实现接口幂等性校验

    一.概念 幂等性, 通俗的说就是一个接口, 多次发起同一个请求, 必须保证操作只能执行一次 比如:订单接口, 不能多次创建订单 支付接口, 重复支付同一笔订单只能扣一次钱 支付宝回调接口, 可能会多次 ...

  8. springboot整合shiro和session的详细过程和自定义登录拦截器

    文章目录 1.shiro依赖 2.shiro配置 shiro过滤器配置: 关联自定义的其他管理器 自定义会话工厂: 3.登陆时记录用户信息 4.shiro一些工具类的学习 5.自定义登录拦截器 shi ...

  9. springboot redis token_Spring Boot + Redis + 注解 + 拦截器来实现接口幂等性校验

    优质文章,及时送达 作者 | wangzaiplus 链接 | www.jianshu.com/p/6189275403ed 一.概念 幂等性, 通俗的说就是一个接口, 多次发起同一个请求, 必须保证 ...

最新文章

  1. iptables的conntrack表满了导致访问网站很慢
  2. spoj26246 Strange But Easy(欧拉筛选法求素数)
  3. HTTP协议基础知识点点滴滴
  4. linux 访问不同网段
  5. MVC3 Razor 视图引擎的基础语法
  6. 54.get set
  7. chrome里面的一些小技巧
  8. bug--Unable to add window –token is not valid; is your activity running?
  9. Network 第九篇 - 双机热备-HSRP
  10. 从技术转管理,我做了什么来拯救自己?
  11. ccna学习指南,入门必备
  12. matlab仿真数字电路,基于matlab的数字逻辑电路仿真
  13. yolo批量检测图片
  14. arcgis双标准纬线等角圆锥投影_常用地图投影之圆锥投影
  15. 挖掘目录穿越漏洞实战经验
  16. Three.js - 光源使用详解3(环境光 HemisphereLight、镜头光晕 LensFlare)
  17. 揭秘短网址背后的灰色产业
  18. 搬砖:void (*signal(int sinno,void(*func)(int)))(int) 函数指针
  19. while(1);的作用
  20. PIC单片机最小系统、DC-DC转换器电路实验

热门文章

  1. NoC-based DNN Accelerator: A Future Design Paradigm
  2. 绕过磊科路由器登录密码
  3. Python热门单元测试框架对比:pytest和unittest还傻傻分不清楚?
  4. java编程之数字魔方(N阶数字魔方和数字旋转魔方)
  5. 【小沐学NLP】Python实现聊天机器人(ALICE)
  6. 算法入门-合并二叉树
  7. 2003server计算机管理里面没有本地用户和组
  8. linux下设置MySQL密码
  9. [离散数学]命题逻辑P_7:范式
  10. mysql select limit 1_select * 为什么不好? limit 1 为什么好? --mysql SQL语句优化