正文
Spring Boot 优雅的配置拦截器方式
顶
原
荐
字数 746
阅读 1
收藏 0
Spring Spring Boot Interceptor
开发十年,就只剩下这套Java开发体系了 >>>
其实spring boot拦截器的配置方式和springMVC差不多,只有一些小的改变需要注意下就ok了。下面主要介绍两种常用的拦截器:
public class LoginInterceptor extends HandlerInterceptorAdapter{ /** * 在请求处理之前进行调用(Controller方法调用之前) * 基于URL实现的拦截器 * @param request * @param response * @param handler * @return * @throws Exception */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String path = request.getServletPath(); if (path.matches(Const.NO_INTERCEPTOR_PATH)) { //不需要的拦截直接过 return true; } else { // 这写你拦截需要干的事儿,比如取缓存,SESSION,权限判断等 System.out.println("===================================="); return true; } } }
关键代码:path.matches(Const.NO_INTERCEPTOR_PATH 就是基于正则匹配的url。
/** * @author BianP * @explain 常量类 */ public class Const { public static final String SUCCESS = "SUCCESS"; public static final String ERROR = "ERROR"; public static final String FIALL = "FIALL"; /**********************对象和个体****************************/ public static final String SESSION_USER = "loginedAgent"; // 用户对象 public static final String SESSION_LOGINID = "sessionLoginID"; // 登录ID public static final String SESSION_USERID = "sessionUserID"; // 当前用户对象ID编号 public static final String SESSION_USERNAME = "sessionUserName"; // 当前用户对象ID编号 public static final Integer PAGE = 10; // 默认分页数 public static final String SESSION_URL = "sessionUrl"; // 被记录的url public static final String SESSION_SECURITY_CODE = "sessionVerifyCode"; // 登录页验证码 // 时间 缓存时间 public static final int TIMEOUT = 1800;// 秒 public static final String ON_LOGIN = "/logout.htm"; public static final String LOGIN_OUT = "/toLogout"; // 不验证URL anon:不验证/authc:受控制的 public static final String NO_INTERCEPTOR_PATH =".*/((.css)|(.js)|(images)|(login)|(anon)).*"; }
①创建注解:
/** * 在需要登录验证的Controller的方法上使用此注解 */ @Target({ElementType.METHOD})// 可用在方法名上 @Retention(RetentionPolicy.RUNTIME)// 运行时有效 public @interface LoginRequired { }
②创建拦截器:
public class AuthorityInterceptor extends HandlerInterceptorAdapter{ @Override public 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(); // 判断接口是否需要登录 LoginRequired methodAnnotation = method.getAnnotation(LoginRequired.class); // 有 @LoginRequired 注解,需要认证 if (methodAnnotation != null) { // 这写你拦截需要干的事儿,比如取缓存,SESSION,权限判断等 System.out.println("===================================="); return true; } return true; } }
三、把拦截器添加到配置中,相当于SpringMVC时的配置文件干的事儿:
/** * 和springmvc的webmvc拦截配置一样 * @author BIANP */ @Configuration public class WebMvcConfigurer extends WebMvcConfigurationSupport { @Override public void addInterceptors(InterceptorRegistry registry) { // 拦截所有请求,通过判断是否有 @LoginRequired 注解 决定是否需要登录 registry.addInterceptor(LoginInterceptor()).addPathPatterns("/**"); registry.addInterceptor(AuthorityInterceptor()).addPathPatterns("/**"); super.addInterceptors(registry); } @Bean public LoginInterceptor LoginInterceptor() { return new LoginInterceptor(); } @Bean public AuthorityInterceptor AuthorityInterceptor() { return new AuthorityInterceptor(); } }
一定要加@Configuration 这个注解,在启动的时候在会被加载。还有一些教程是用的“WebMvcConfigurerAdapter”,也是一样的,但是会提示这个方法是过时的了。
其实springMVC很多东西,都可以搬到springboot中来使用,只需要把配置文件的模式,改成 对应@Configuration 类就好了。
© 著作权归作者所有
共有人打赏支持
上一篇: 分分钟看懂java用引用传递与值传递在堆栈中的规则
下一篇: Spring Boot + Mybatis Plus 整合——双剑合璧
粉丝 20
博文 28
码字总数 21591
作品 0
成都
程序员
提问相关文章 最新文章
在spring boot 1.5.x中,resources/static目录下的静态资源可以直接访问,并且访问路径上不用带static,比如静态资源放置位置如下图所示: 那么访问静态资源的路径可以是: http://localhost...
Mr---D
04/13
0
0
初升级版本,在已经使用的系统内还是存在一些兼容性的问题,有很多变化!!!也存在一些过时的方法、配置文件信息以及类,我们在之前版本的中可以使用抽象类来处理相关的配置,由于版本最低支...
恒宇少年
03/17
0
0
SpringBoot详解系列文章: SpringBoot详解(一)-快速入门 SpringBoot详解(二)-Spring Boot的核心 SpringBoot详解(三)-Spring Boot的web开发 SpringBoot详解(四)-优雅地处理日志 一、w...
CSDN_LQR
2017/08/30
0
0
Spring Boot 初识 SpringBoot前世今生 本文主要讲述spring boot的由来,即其它诞生的背景,初衷,现状,及对未来的展望。 Spring Boot参考指南中文版--Chapter1.Spring Boot中文文档 本节提供...
小致dad
2017/11/07
0
0
RabbitMQ RabbitMQ 安装 linux安装RabbitMQ详细教程 Ubuntu 16.04 RabbitMq 安装与运行(安装篇) ubantu安装rabbitMQ步骤 多线程 Spring @transactional注解和synchronized同步锁同时使用不...
OSC_fly
07/26
0
0
没有更多内容
加载失败,请刷新页面
加载更多何为泛型(Generics) 面向对象编程语言的多态特性包括:任一多态(ad hoc polymorphism,又名重载)、子类型多态(subtype polymorphism,又名覆盖)以及参数多态(parameter polymorphism,...
SamYjy
33分钟前
2
0
CSS介绍及布局特定 层叠样式表是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。 CSS目前最新版本为CSS3,是能够真正做到...
青衣霓裳
33分钟前
2
0
它是一个高性能的Key-Value数据库。设计了完善的持久化机制,同时保证性能和安全性。能够良好的支持范围查询,因为K-V记录就是按照Key来排序的。 下图为写入的流程: 可以看到主要的三个组成...
许此一生
39分钟前
10
0
2015年,阿里云宣布正式推出RDS for PostgreSQL服务,届时,阿里云成为国内首家同时支持MySQL、SQL Server 和PostgreSQL关系型数据库的云计算服务商。 用户在云上就能享受PostgreSQL引擎带来的...
迷你芊宝宝
40分钟前
4
0
状态名 作用域 详细解释 Aborted_clients Global 由于客户端没有正确关闭连接导致客户端终止而中断的连接数 Aborted_connects Global 试图连接到MySQL服务器而失败的连接数 Binlog_cache_dis...
若杰
46分钟前
1
0
没有更多内容
加载失败,请刷新页面
加载更多