springboot的拦截器和限制单一用户登录
因为项目使用是用户登录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的拦截器和限制单一用户登录相关推荐
- SpringBoot——使用拦截器拦截未登录用户
前置知识SpringBoot配置拦截器基于HandlerInterceptor接口实现,关键三个方法 preHandle()执行目标之前 postHandle()执行目标之后 afterComplet ...
- springboot Interceptor拦截器excludePathPatterns失效
springboot Interceptor拦截器excludePathPatterns失效 使用jwt和HandlerInterceptorAdapter做登录的拦截放行失效,其实更多时候不是配置文 ...
- 【SpringBoot】拦截器使用@Autowired注入接口为null解决方法
[SpringBoot]拦截器使用@Autowired注入接口为null解决方法 参考文章: (1)[SpringBoot]拦截器使用@Autowired注入接口为null解决方法 (2)https: ...
- SpringBoot与拦截器
自定义拦截器 package com.buba.interceptor;import com.buba.pojo.User; import org.springframework.web.servle ...
- SpringBoot配置拦截器导致swagger失效
问题背景: Springboot 启用拦截器后,Swagger无法访问 原因 拦截器拦截了所有的请求,导致swagger也被拦截,当在进行鉴权的的时候,可能需要传入一些特定的参数,或者请求头信息,这样 ...
- springboot设置拦截器的方法
springboot设置拦截器的方式: 1.编写一个类,在类上面加上@Configuration注解,然后继承 WebMvcConfigurerAdapter. 重写父类的方法:addIntercep ...
- springboot项目拦截器中获取接口返回数据_Spring Boot自定义Annotation实现接口自动幂...
在实际的开发项目中,一个对外暴露的接口往往会面临很多次请求,我们来解释一下幂等的概念:任意多次执行所产生的影响均与一次执行的影响相同.按照这个含义,最终的含义就是 对数据库的影响只能是一次性的,不能重 ...
- springcloud springboot 异常拦截器 项目完善03
springcloud springboot 异常拦截器 项目完善03 > 创建异常拦截器,在controller层没处理的异常抛出时,异常拦截器拦截后输入自定义的报错信息. 新建GlobalE ...
- 单一用户登录,即当前用户登录后要踢出前一个登录,即做出踢人效果,如何实现?
单一用户登录,即当前用户登录后要踢出前一个登录,即做出踢人效果,如何实现? 一般情况下,用户登录,有两种方式:cookie方式,session方式.一般情况下,session方式是使用最多的. 一.关 ...
最新文章
- luogu P5142 区间方差(线段树、乘法逆元)
- 所有你要知道的 BERT 模型压缩方法,都在这里!
- python 操作fit文件图像
- Response.Redirect() 跳转中的ThreadAbortException
- HashMap和Hashtable的区别总结
- bat文件无法保存为ansi_数组矩阵和PNG保存为nii文件
- 怎么形容智能冰激凌机器人_有关于形容描写冰激凌的句子及图片
- 31 SD配置-主数据-信用管理-定义自动信贷控制
- redis相关(搭建和数据落盘)
- 此windows副本不是正版
- 现在1分、2分、5分硬币的收藏价格如何呢?
- 计算机维修情况说明书,电脑坏了(电脑坏了情况说明)
- TikTok Shop(英国小店)常见问题:退货?结算?回款?等。
- M1芯片实现Kail虚拟机(无Parallels)
- 运行老项目报错 opensslErrorStack: [ ‘error:03000086:digital envelope routines::initialization error‘ ].....
- Unity实现刀光特效
- 用OpenGL码一艘战舰~哈哈
- 如何零基础快速开发上手app,成为app开发高手
- cocos2dx中的内存管理
- mysql中DQL操作