因为项目使用是用户登录redis缓存一个token,所以当用户在a设备登录时,便缓存了tokenA,这时用户去b设备登录,新缓存了一个tokenB,如果用户使用a设备去请求,token已经失效,从而实现单一设备登录

1 实现接口HandlerInterceptor


public class MiniInterceptor implements HandlerInterceptor{/*** 请求controller之前true放行,false拦截并返回response*/@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("拦截请求"+request.getRequestURL());//验证逻辑return false;}/***请求controller成功返回视图之前*/@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {}/*** 请求成功,返回视图之后*/@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {}
}

2 配置注入拦截器

  @Configuration//标志为配置文件public class WebMvcConfig extends WebMvcConfigurerAdapter {把拦截器注册到springmvc中/*** 注册miniInterceptor为bean到SpringMvc*/@Beanpublic MiniInterceptor miniInterceptor(){return new MiniInterceptor();}/*** 拦截器注册中心  注册到拦截器里面去 实现addInterceptors方法 添加拦截规则* @param registry*/@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(miniInterceptor()).addPathPatterns("/user/**");super.addInterceptors(registry);}

3 完善业务逻辑 逻辑在拦截器的preHander方法中,

- 把认证信息和业务信息区分开,吧userid和token写在请求头里(可忽略)String userId = request.getHeader("userId");String userToken = request.getHeader("userToken");- 怎么吧拦截信息返回回去
把信息写在preHandle的response中
~~~returnErrorResponse(response,new JSONResult().errorTokenMsg("登录超时"));/*** @author XieLinan* @create 2018/9/10 0010 16:15* @desc     将错误信息返回给前端* @Version: 1.0*/public void returnErrorResponse(HttpServletResponse response, JSONResult result) throws IOException {//设置响应信息的内容格式response.setContentType("test/json");//设置响应信息的编码response.setCharacterEncoding("utf-8");OutputStream outputStream = null;//获得响应对象的输入流 把数据写入try {response.reset();outputStream = response.getOutputStream();byte[] b = JsonUtils.objectToJson(result).getBytes("utf-8");outputStream.write(b);outputStream.flush();}finally {//关闭流if(outputStream != null){outputStream.close();}}}
~~~

有任何问题欢迎指点 qq 1294235127

springboot的拦截器和限制单一用户登录相关推荐

  1. SpringBoot——使用拦截器拦截未登录用户

    前置知识SpringBoot配置拦截器基于HandlerInterceptor接口实现,关键三个方法 preHandle()执行目标之前 postHandle()执行目标之后 afterComplet ...

  2. springboot Interceptor拦截器excludePathPatterns失效

    springboot Interceptor拦截器excludePathPatterns失效 使用jwt和HandlerInterceptorAdapter做登录的拦截放行失效,其实更多时候不是配置文 ...

  3. 【SpringBoot】拦截器使用@Autowired注入接口为null解决方法

    [SpringBoot]拦截器使用@Autowired注入接口为null解决方法 参考文章: (1)[SpringBoot]拦截器使用@Autowired注入接口为null解决方法 (2)https: ...

  4. SpringBoot与拦截器

    自定义拦截器 package com.buba.interceptor;import com.buba.pojo.User; import org.springframework.web.servle ...

  5. SpringBoot配置拦截器导致swagger失效

    问题背景: Springboot 启用拦截器后,Swagger无法访问 原因 拦截器拦截了所有的请求,导致swagger也被拦截,当在进行鉴权的的时候,可能需要传入一些特定的参数,或者请求头信息,这样 ...

  6. springboot设置拦截器的方法

    springboot设置拦截器的方式: 1.编写一个类,在类上面加上@Configuration注解,然后继承 WebMvcConfigurerAdapter. 重写父类的方法:addIntercep ...

  7. springboot项目拦截器中获取接口返回数据_Spring Boot自定义Annotation实现接口自动幂...

    在实际的开发项目中,一个对外暴露的接口往往会面临很多次请求,我们来解释一下幂等的概念:任意多次执行所产生的影响均与一次执行的影响相同.按照这个含义,最终的含义就是 对数据库的影响只能是一次性的,不能重 ...

  8. springcloud springboot 异常拦截器 项目完善03

    springcloud springboot 异常拦截器 项目完善03 > 创建异常拦截器,在controller层没处理的异常抛出时,异常拦截器拦截后输入自定义的报错信息. 新建GlobalE ...

  9. 单一用户登录,即当前用户登录后要踢出前一个登录,即做出踢人效果,如何实现?

    单一用户登录,即当前用户登录后要踢出前一个登录,即做出踢人效果,如何实现? 一般情况下,用户登录,有两种方式:cookie方式,session方式.一般情况下,session方式是使用最多的. 一.关 ...

最新文章

  1. luogu P5142 区间方差(线段树、乘法逆元)
  2. 所有你要知道的 BERT 模型压缩方法,都在这里!
  3. python 操作fit文件图像
  4. Response.Redirect() 跳转中的ThreadAbortException
  5. HashMap和Hashtable的区别总结
  6. bat文件无法保存为ansi_数组矩阵和PNG保存为nii文件
  7. 怎么形容智能冰激凌机器人_有关于形容描写冰激凌的句子及图片
  8. 31 SD配置-主数据-信用管理-定义自动信贷控制
  9. redis相关(搭建和数据落盘)
  10. 此windows副本不是正版
  11. 现在1分、2分、5分硬币的收藏价格如何呢?
  12. 计算机维修情况说明书,电脑坏了(电脑坏了情况说明)
  13. TikTok Shop(英国小店)常见问题:退货?结算?回款?等。
  14. M1芯片实现Kail虚拟机(无Parallels)
  15. 运行老项目报错 opensslErrorStack: [ ‘error:03000086:digital envelope routines::initialization error‘ ].....
  16. Unity实现刀光特效
  17. 用OpenGL码一艘战舰~哈哈
  18. 如何零基础快速开发上手app,成为app开发高手
  19. cocos2dx中的内存管理
  20. mysql中DQL操作

热门文章

  1. vue---发表评论页面编写
  2. esxi能直通的显卡型号_2020年6月笔记本电脑推荐,直接推荐具体型号,小白选购指南...
  3. 【系统安全学习2】欺骗型攻击
  4. shell脚本使用sftp上传文件
  5. 逐浪字库新字库出炉!
  6. 第四届全国高校GIS技能大赛开发组作品评审心得
  7. Android中检测手机制式和移动网络类型
  8. 谈谈HTML5对生态系统的影响
  9. [附源码]java毕业设计游戏网站设计
  10. 采访大学计算机专业老师,采访大学老师作文