代码有时候需要在调用前进行生成一些代码

如:

先拦截这个权限,再做判断 这个现在 基本上 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的使用相关推荐

  1. 处理器拦截器(HandlerInterceptor)详解

    处理器拦截器(HandlerInterceptor)详解 编程界的小学生 关注 2017.04.06 15:19* 字数 881 阅读 657评论 0喜欢 4 简介 SpringWebMVC的处理器拦 ...

  2. 拦截器HandlerInterceptor、ResponseBodyAdvice和@ExceptionHandler执行顺序

    HandlerInterceptor接口结构: ResponseBodyAdvice接口结构 执行顺序: 1.HandlerInterceptor.preHandle() 2. 业务方法 3.@Exc ...

  3. SpringMVC和SpringBoot的拦截器 HandlerInterceptor 入门

    总体步骤 1.自定义一个实现HandlerInterceptor 接口的类比如SignUpHandlerInterceptor(我这边以注册登录拦截器为例). package com.example. ...

  4. SpringMVC拦截器HandlerInterceptor原理及使用

    在使用SpringMVC拦截器的时候,我们接触的最多的便是HandlerInterceptor接口,因为我们所有的自定义拦截器都必须要实现HandlerInterceptor接口,那么就先从Handl ...

  5. 一篇文章教你弄懂 SpringMvc中的HandlerInterceptor

    文章列表 一.HandlerInterceptor简介 一.HandlerInterceptor应用实例 写在前面: 我是「境里婆娑」.我还是从前那个少年,没有一丝丝改变,时间只不过是考验,种在心中信 ...

  6. Spring Boot——自定义多个拦截器(HandlerInterceptor)配置方法与执行顺序

    执行顺序 源代码 拦截器类 package com.jd.m.tg.interceptor;import org.slf4j.Logger; import org.slf4j.LoggerFactor ...

  7. HandlerInterceptor和HandlerExceptionResolver 如何在DispatcherServlet中生效?

    HandlerInterceptor拦截Controller,实现pre和post方法. HandlerExceptionResolver全局try-catch  处理Controller里的异常. ...

  8. HandlerInterceptorAdapter或HandlerInterceptor的使用

    撸了今年阿里.头条和美团的面试,我有一个重要发现.......>>> Spring拦截器 HandlerInterceptorAdapter需要继承,HandlerIntercept ...

  9. SpringMVC拦截器HandlerInterceptor使用

    Spring MVC 拦截器(HandlerInterceptor)使用 Spring 拦截器--HandlerInterceptor 转载于:https://www.cnblogs.com/goto ...

  10. HandlerInterceptor拦截器使用总结

    转载自 https://blog.csdn.net/weixin_36832313/article/details/79115693 简介 SpringMVC的处理器拦截器,类似于Servlet开发中 ...

最新文章

  1. PHP CRC16 校验码的算法怎么使用
  2. python打包zip文件_python 解压文件,合并文件 打包成zip格式文件 生成MD5值
  3. ccna____总结
  4. STS安装 activiti-designer-5.18.0插件
  5. PHP源码-2021来客多商户在线客服系统
  6. 20165212任胤第四周课上作业补做
  7. tsung压测mysql_高并发测试工具Tsung使用教程
  8. Net::SSH::Perl 连接远程主机慢的原因
  9. python读取XML中bndbox和object name的方法
  10. 从3D Studio Max导入物体 Importing Objects From 3D Studio Max
  11. ssm中web配置各框架的配置文件路径方式
  12. 不知不觉 CDSN 也有了百万访问量了
  13. java贪吃蛇源代码_java贪吃蛇源代码详解
  14. java用switch语句抽奖_Java使用带有switch语句的枚举
  15. 自动化运维工具puppet学习笔记之基础篇
  16. 成年人改名字要哪些步骤和手续?
  17. threejs 形状几何体_使用Playcanvas.js实现的3D几何体/形状
  18. n用matlab怎么表示什么意思,matlab中n=[0:1:N-1];是什么意思
  19. 如何让MenuBar的菜单栏靠右对齐?
  20. 用python打造一颗爱心

热门文章

  1. 托福艺术导向(纪录片《文明》单词总结)PART1
  2. HTML期末大作业 学生DW静态网页设计 动画漫展学习资料电影模板(6页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源
  3. 我慌了!我妈从床底掏出了我珍藏多年的小本本-----JAVA_Lambda表达式(笔记)
  4. 数据库作业——汽车租赁系统
  5. 勿喷:thinkphp项目怎么跑起来
  6. 电脑(win 10)更新后部分软件打不开、无法使用
  7. 路由器的两种工作模式
  8. 高通QCC302x,QCC512X,QCC303X完成智能硬件开发目录
  9. 在Unity2018如何使用代码一键设置Icon
  10. 产品思维训练 | 你的项目总是不能按期上线,你会如何解决?