springboot 自定义注解拦截器
springboot 自定义注解拦截器
最近在工作中,发现自定义注解拦截使用起来特别方便,现在来写出来给大家看看
环境springboot
- 首先写一个自定义注解
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 {
}
- 创建拦截器
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);}
}
- 创建一个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";}}
- 启动程序来测试
访问http://localhost:8080/test/login,log打印需要登录
访问http://localhost:8080/test/login1,直接返回数据
以上就是创建springboot自定义注解拦截器的全过程
码云源码–请看分支(自定义注解拦截器)
springboot 自定义注解拦截器相关推荐
- 自定义注解+拦截器优化项目代码
自定义注解+拦截器的优势 类似用户权限或者接口限流的需求,但并不是所有操作或者接口需要.可以使用过滤器或者拦截器,但这样就必须在配置文件里加上所有方法或者使用通配符. 所以可以采用一种比较简单灵活的方 ...
- Springboot + redis + 注解 + 拦截器来实现接口幂等性校验
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:wangzaiplus www.jianshu.com/p/ ...
- springboot + redis + 注解 + 拦截器 实现接口幂等性校验
点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 来源:https://www.jianshu.com/p/6189275403ed 一.概念 ...
- Springboot 自定义mybatis 拦截器,实现我们要的扩展
前言 相信大家对拦截器并不陌生,对mybatis也不陌生. 有用过pagehelper的,那么对mybatis拦截器也不陌生了,按照使用的规则触发sql拦截,帮我们自动添加分页参数 . 那么今天,我们 ...
- 在SpringBoot项目中,自定义注解+拦截器优雅的实现敏感数据的加解密!
在实际生产项目中,经常需要对如身份证信息.手机号.真实姓名等的敏感数据进行加密数据库存储,但在业务代码中对敏感信息进行手动加解密则十分不优雅,甚至会存在错加密.漏加密.业务人员需要知道实际的加密规则等 ...
- Springboot 自定义注解AOP实现时间参数格式转换
前言 场景: 前端传过来的时间参数,我们后端自定义时间格式转化使用,想转成什么就转成什么. 不同业务场景,跟前端对接,一种控件基本时间参数是固定格式的,为了避免前端去转换时间参数的格式,跟前端约定好, ...
- springboot幂等性_Spring Boot + Redis + 注解 + 拦截器来实现接口幂等性校验
一.概念 幂等性, 通俗的说就是一个接口, 多次发起同一个请求, 必须保证操作只能执行一次 比如:订单接口, 不能多次创建订单 支付接口, 重复支付同一笔订单只能扣一次钱 支付宝回调接口, 可能会多次 ...
- springboot整合shiro和session的详细过程和自定义登录拦截器
文章目录 1.shiro依赖 2.shiro配置 shiro过滤器配置: 关联自定义的其他管理器 自定义会话工厂: 3.登陆时记录用户信息 4.shiro一些工具类的学习 5.自定义登录拦截器 shi ...
- springboot redis token_Spring Boot + Redis + 注解 + 拦截器来实现接口幂等性校验
优质文章,及时送达 作者 | wangzaiplus 链接 | www.jianshu.com/p/6189275403ed 一.概念 幂等性, 通俗的说就是一个接口, 多次发起同一个请求, 必须保证 ...
最新文章
- iptables的conntrack表满了导致访问网站很慢
- spoj26246	Strange But Easy(欧拉筛选法求素数)
- HTTP协议基础知识点点滴滴
- linux 访问不同网段
- MVC3 Razor 视图引擎的基础语法
- 54.get set
- chrome里面的一些小技巧
- bug--Unable to add window –token is not valid; is your activity running?
- Network 第九篇 - 双机热备-HSRP
- 从技术转管理,我做了什么来拯救自己?
- ccna学习指南,入门必备
- matlab仿真数字电路,基于matlab的数字逻辑电路仿真
- yolo批量检测图片
- arcgis双标准纬线等角圆锥投影_常用地图投影之圆锥投影
- 挖掘目录穿越漏洞实战经验
- Three.js - 光源使用详解3(环境光 HemisphereLight、镜头光晕 LensFlare)
- 揭秘短网址背后的灰色产业
- 搬砖:void (*signal(int sinno,void(*func)(int)))(int) 函数指针
- while(1);的作用
- PIC单片机最小系统、DC-DC转换器电路实验
热门文章
- NoC-based DNN Accelerator: A Future Design Paradigm
- 绕过磊科路由器登录密码
- Python热门单元测试框架对比:pytest和unittest还傻傻分不清楚?
- java编程之数字魔方(N阶数字魔方和数字旋转魔方)
- 【小沐学NLP】Python实现聊天机器人(ALICE)
- 算法入门-合并二叉树
- 2003server计算机管理里面没有本地用户和组
- linux下设置MySQL密码
- [离散数学]命题逻辑P_7:范式
- mysql select limit 1_select * 为什么不好? limit 1 为什么好? --mysql SQL语句优化