添加拦截器解析用户信息
已登录购物车
接下来,我们完成已登录购物车。
在刚才的未登录购物车编写时,我们已经预留好了编写代码的位置,逻辑也基本一致。
添加登录校验
购物车系统只负责登录状态的购物车处理,因此需要添加登录校验,我们通过JWT鉴权即可实现。
引入JWT相关依赖
我们引入之前写的鉴权工具:learn-auth-common
<dependency><groupId>com.learn.auth</groupId><artifactId>learn-auth-common</artifactId><version>1.0.0-SNAPSHOT</version>
</dependency>
配置公钥
learn:jwt:pubKeyPath: C:/tmp/rsa/rsa.pub # 公钥地址cookieName: LY_TOKEN # cookie的名称
加载公钥
代码:
@ConfigurationProperties(prefix = "learn.jwt")
public class JwtProperties {private String pubKeyPath;// 公钥private PublicKey publicKey; // 公钥private String cookieName;private static final Logger logger = LoggerFactory.getLogger(JwtProperties.class);@PostConstructpublic void init(){try {// 获取公钥和私钥this.publicKey = RsaUtils.getPublicKey(pubKeyPath);} catch (Exception e) {logger.error("初始化公钥失败!", e);throw new RuntimeException();}}public String getPubKeyPath() {return pubKeyPath;}public void setPubKeyPath(String pubKeyPath) {this.pubKeyPath = pubKeyPath;}public PublicKey getPublicKey() {return publicKey;}public void setPublicKey(PublicKey publicKey) {this.publicKey = publicKey;}public String getCookieName() {return cookieName;}public void setCookieName(String cookieName) {this.cookieName = cookieName;}
}
编写拦截器
因为很多接口都需要进行登录,我们直接编写SpringMVC拦截器,进行统一登录校验。同时,我们还要把解析得到的用户信息保存起来,以便后续的接口可以使用。
代码:
public class LoginInterceptor extends HandlerInterceptorAdapter {private JwtProperties jwtProperties;// 定义一个线程域,存放登录用户private static final ThreadLocal<UserInfo> tl = new ThreadLocal<>();public LoginInterceptor(JwtProperties jwtProperties) {this.jwtProperties = jwtProperties;}@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {// 查询tokenString token = CookieUtils.getCookieValue(request, "LY_TOKEN");if (StringUtils.isBlank(token)) {// 未登录,返回401response.setStatus(HttpStatus.UNAUTHORIZED.value());return false;}// 有token,查询用户信息try {// 解析成功,证明已经登录UserInfo user = JwtUtils.getInfoFromToken(token, jwtProperties.getPublicKey());// 放入线程域tl.set(user);return true;} catch (Exception e){// 抛出异常,证明未登录,返回401response.setStatus(HttpStatus.UNAUTHORIZED.value());return false;}}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response,
Object handler, Exception ex) throws Exception {tl.remove();}public static UserInfo getLoginUser() {return tl.get();}
}
注意:
这里我们使用了
ThreadLocal
来存储查询到的用户信息,线程内共享,因此请求到达Controller
后可以共享User并且对外提供了静态的方法:
getLoginUser()
来获取User信息
配置拦截器
配置SpringMVC,使过滤器生效:
@Configuration
@EnableConfigurationProperties(JwtProperties.class)
public class MvcConfig implements WebMvcConfigurer {@Autowiredprivate JwtProperties jwtProperties;@Beanpublic LoginInterceptor loginInterceptor() {return new LoginInterceptor(jwtProperties);}@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(loginInterceptor()).addPathPatterns("/**");}
}
添加拦截器解析用户信息相关推荐
- token拦截器android_vue.js添加拦截器,实现token认证(使用axios)
什么是token? token是一个用户自定义的任意字符串,目前开发中,token都是在服务端生成并且token的值会保存到服务器后台.只有服务器和客户端知道这个字符串,于是,这个token就成了两者 ...
- javaweb添加拦截器
js请求后台代码添加拦截器: package com.ctzj.biz.isale.deploy.controller; import java.io.IOException; import java ...
- cxf添加拦截器_在CXF API和拦截器中添加Gzip压缩
cxf添加拦截器 如今,由于我们在响应中发送大量数据,因此必须对API响应执行Gziping. 它节省了网络带宽和交付时间,当然还节省了Internet上的空间. CXF提供了以多种方式使用Gzip压 ...
- springboot 添加拦截器之后中文乱码_spring boot 2.x 添加拦截器配置未生效的问题
背景: 今天有一个需求需要拦截除登录相关请求以外的所有请求,并查看request 中是否包含指定的信息,而自然就想到了使用拦截器就可以轻松实现 编写拦截器,获取请求头信息中的test,并打印出来 @C ...
- 为fetch添加拦截器功能
fetch 添加拦截器拦截器 使用过axios的便会知道axios 有axios.interceptors.request.use请求拦截器与service.interceptors.response ...
- 拦截器 java_在Java后端如何添加拦截器
(1)InterceptorConfig.java文件内容如下: import org.springframework.web.servlet.config.annotation.WebMvcConf ...
- springboot添加拦截器 监听等设置
1.添加拦截器 package com.jy.config;import org.springframework.context.annotation.Configuration; import or ...
- 【12306购票】预定订单初始化、解析用户信息以及坐席信息
预定订单初始化.解析用户信息以及坐席信息 1. 预定订单初始化 2. 获取用户信息 3. 解析用户信息 4. 获取乘客信息列表 5. 解析坐席类型 6. 构造乘客信息 学习目标 了解 预定订单初始化 ...
- Okhttp 插入缓存拦截器 解析
我们在做网络请求的时候,如果网络请求过于频繁而且请求的数据变动不大,或者基本没有变动,这个时候如果没有缓存功能,我们想一下 会浪费掉多少资源,一次请求刷新一次,去请求一次,不但会消耗用户的流量,而且还 ...
最新文章
- 采集标签_科创致远轻MES工时采集系统帮助工厂快速构建工效节拍绩效考核
- SpringBoot+Thymeleaf+DataTables实现数据的查询与显示
- python3导入特定的成员
- java 技能鉴定_JAVA试题-技能鉴定
- 拿去用,常见几种加密算法的Python实现
- AjaxPro无刷新选择列表框/下拉框[方便|稳定]
- EXSi5.5安装篇
- Mongdb中常用的数据清洗
- 超图神经网络 Hypergraph Neural Networks
- OracleDBV工具说明
- 自然人税收管理系统服务器,【轻松学个税申报】自然人税收管理系统客户端操作...
- 优酷、爱奇艺视频码率与YouTube视频码率
- 轻量级web api_API接口管理,这15种开源工具助你管理API
- 去年我国出生率跌破1%,有什么影响?
- 如何用数学课件制作工具画函数切线
- 数据库技术之MVCC
- 如何管理和使用哪些命令操作MySQL数据库?(基本操作,SQL语言,DDL,DML,DQL,DCL,Windows字符和图形界面MySQL安装)
- 计算机操作系统的阶段分为几个阶段,浅谈操作系统的发展历程
- 东华软件张涵诚:政府大数据应用的案例和数据价值释放的方法
- 跨市场套利——策略简介与风险因素