HandlerInterceptor的使用
代码有时候需要在调用前进行生成一些代码
如:
先拦截这个权限,再做判断 这个现在 基本上 gateway已经做了,或者在分布式系统里面用的单点登入,但是还有别的用处,比如,session存入ThreadLocal里,调用获取session的时候,在这边创建,方法里直接拿取
1
拦截代码如下:
package com.imooc.controller.interceptor;
import com.imooc.utils.IMOOCJSONResult;
import com.imooc.utils.JsonUtils;
import com.imooc.utils.RedisOperator;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
/**
* @Author: huey
* @Desc: 拦截器
*/
public class UserTokenIntercept implements HandlerInterceptor {
public static final String REDIS_USER_TOKEN ="redis_user_token";
@Resource
private RedisOperator redisOperator;
/**
* 在controller之前调用 校验登入token
* 看下后期优化 放入 路由拦截 或者根据 springsecurity进行搭建一套权限代码
* @param request
* @param response
* @param handler
* @return
* @throws Exception
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//需要前端配合
String token=request.getHeader("headerUserToken");
String userId=request.getHeader("headerUserId");
if(StringUtils.isNotBlank(userId)&&StringUtils.isNotBlank(token)){
String redisToken=redisOperator.get(REDIS_USER_TOKEN+":"+userId);
if(StringUtils.isBlank(redisToken)){
returnErrorResponse(response, IMOOCJSONResult.errorMsg("请登录..."));
return false;
}else {
if(redisToken.equals(token)){
System.out.println("----通过了-----");
return true;
}else {
System.out.println("----账号不对-----");
return false;
}
}
}else {
// false 请求不通过,被拦截
//true 请求经过校验后通过,可以放行
returnErrorResponse(response, IMOOCJSONResult.errorMsg("请登录..."));
return false;
}
}
public void returnErrorResponse(HttpServletResponse response,
IMOOCJSONResult result) {
OutputStream out = null;
try {
response.setCharacterEncoding("utf-8");
response.setContentType("text/json");
out = response.getOutputStream();
out.write(JsonUtils.objectToJson(result).getBytes("utf-8"));
out.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (out != null) {
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 在controller之后,渲染视图之前
* @param request
* @param response
* @param handler
* @param modelAndView
* @throws Exception
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
/**
*在controller之后,渲染视图之后
* @param request
* @param response
* @param handler
* @param ex
* @throws Exception
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
2 实现的是
implements WebMvcConfigurer
里面的
addInterceptors(InterceptorRegistry registry)
方法,这里注入到bean看你自己的习惯。
/**
* 注入token拦截器 到bean
* @return
*/
@Bean
public UserTokenIntercept userTokenIntercept(){
return new UserTokenIntercept();
}
/**
* 拦截方法:验证器
* 拦截路径
* 注册过去
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(userTokenIntercept())
.addPathPatterns("/hello")
.addPathPatterns("/shopcart/add")
.addPathPatterns("/shopcart/del")
.addPathPatterns("/address/list")
.addPathPatterns("/address/add")
.addPathPatterns("/address/update")
.addPathPatterns("/address/setDefalut")
.addPathPatterns("/address/delete")
.addPathPatterns("/orders/*")
.addPathPatterns("/center/*")
.addPathPatterns("/userInfo/*")
.addPathPatterns("/myorders/*")
.addPathPatterns("/mycomments/*")
.excludePathPatterns("/myorders/deliver")
.excludePathPatterns("/orders/notifyMerchantOrderPaid");;
WebMvcConfigurer.super.addInterceptors(registry);
}
HandlerInterceptor的使用相关推荐
- 处理器拦截器(HandlerInterceptor)详解
处理器拦截器(HandlerInterceptor)详解 编程界的小学生 关注 2017.04.06 15:19* 字数 881 阅读 657评论 0喜欢 4 简介 SpringWebMVC的处理器拦 ...
- 拦截器HandlerInterceptor、ResponseBodyAdvice和@ExceptionHandler执行顺序
HandlerInterceptor接口结构: ResponseBodyAdvice接口结构 执行顺序: 1.HandlerInterceptor.preHandle() 2. 业务方法 3.@Exc ...
- SpringMVC和SpringBoot的拦截器 HandlerInterceptor 入门
总体步骤 1.自定义一个实现HandlerInterceptor 接口的类比如SignUpHandlerInterceptor(我这边以注册登录拦截器为例). package com.example. ...
- SpringMVC拦截器HandlerInterceptor原理及使用
在使用SpringMVC拦截器的时候,我们接触的最多的便是HandlerInterceptor接口,因为我们所有的自定义拦截器都必须要实现HandlerInterceptor接口,那么就先从Handl ...
- 一篇文章教你弄懂 SpringMvc中的HandlerInterceptor
文章列表 一.HandlerInterceptor简介 一.HandlerInterceptor应用实例 写在前面: 我是「境里婆娑」.我还是从前那个少年,没有一丝丝改变,时间只不过是考验,种在心中信 ...
- Spring Boot——自定义多个拦截器(HandlerInterceptor)配置方法与执行顺序
执行顺序 源代码 拦截器类 package com.jd.m.tg.interceptor;import org.slf4j.Logger; import org.slf4j.LoggerFactor ...
- HandlerInterceptor和HandlerExceptionResolver 如何在DispatcherServlet中生效?
HandlerInterceptor拦截Controller,实现pre和post方法. HandlerExceptionResolver全局try-catch 处理Controller里的异常. ...
- HandlerInterceptorAdapter或HandlerInterceptor的使用
撸了今年阿里.头条和美团的面试,我有一个重要发现.......>>> Spring拦截器 HandlerInterceptorAdapter需要继承,HandlerIntercept ...
- SpringMVC拦截器HandlerInterceptor使用
Spring MVC 拦截器(HandlerInterceptor)使用 Spring 拦截器--HandlerInterceptor 转载于:https://www.cnblogs.com/goto ...
- HandlerInterceptor拦截器使用总结
转载自 https://blog.csdn.net/weixin_36832313/article/details/79115693 简介 SpringMVC的处理器拦截器,类似于Servlet开发中 ...
最新文章
- PHP CRC16 校验码的算法怎么使用
- python打包zip文件_python 解压文件,合并文件 打包成zip格式文件 生成MD5值
- ccna____总结
- STS安装 activiti-designer-5.18.0插件
- PHP源码-2021来客多商户在线客服系统
- 20165212任胤第四周课上作业补做
- tsung压测mysql_高并发测试工具Tsung使用教程
- Net::SSH::Perl 连接远程主机慢的原因
- python读取XML中bndbox和object name的方法
- 从3D Studio Max导入物体 Importing Objects From 3D Studio Max
- ssm中web配置各框架的配置文件路径方式
- 不知不觉 CDSN 也有了百万访问量了
- java贪吃蛇源代码_java贪吃蛇源代码详解
- java用switch语句抽奖_Java使用带有switch语句的枚举
- 自动化运维工具puppet学习笔记之基础篇
- 成年人改名字要哪些步骤和手续?
- threejs 形状几何体_使用Playcanvas.js实现的3D几何体/形状
- n用matlab怎么表示什么意思,matlab中n=[0:1:N-1];是什么意思
- 如何让MenuBar的菜单栏靠右对齐?
- 用python打造一颗爱心
热门文章
- 托福艺术导向(纪录片《文明》单词总结)PART1
- HTML期末大作业 学生DW静态网页设计 动画漫展学习资料电影模板(6页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源
- 我慌了!我妈从床底掏出了我珍藏多年的小本本-----JAVA_Lambda表达式(笔记)
- 数据库作业——汽车租赁系统
- 勿喷:thinkphp项目怎么跑起来
- 电脑(win 10)更新后部分软件打不开、无法使用
- 路由器的两种工作模式
- 高通QCC302x,QCC512X,QCC303X完成智能硬件开发目录
- 在Unity2018如何使用代码一键设置Icon
- 产品思维训练 | 你的项目总是不能按期上线,你会如何解决?