SpringBoot2如何整合JWT框架解决Token跨域验证问题
发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,小编给大家分享一下SpringBoot2如何整合JWT框架解决Token跨域验证问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解
千家信息网最后更新 2025年11月09日SpringBoot2如何整合JWT框架解决Token跨域验证问题
小编给大家分享一下SpringBoot2如何整合JWT框架解决Token跨域验证问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
一、传统Session认证
1、认证过程
1、用户向服务器发送用户名和密码。2、服务器验证后在当前对话(session)保存相关数据。3、服务器向返回sessionId,写入客户端 Cookie。4、客户端每次请求,需要通过 Cookie,将 sessionId 回传服务器。5、服务器收到 sessionId,验证客户端。
2、存在问题
1、session保存在服务端,客户端访问高并发时,服务端压力大。2、扩展性差,服务器集群,就需要 session 数据共享。
二、JWT简介
JWT(全称:JSON Web Token),在基于HTTP通信过程中,进行身份认证。
1、认证流程
1、客户端通过用户名和密码登录服务器;2、服务端对客户端身份进行验证;3、服务器认证以后,生成一个 JSON 对象,发回客户端;4、客户端与服务端通信的时候,都要发回这个 JSON 对象;5、服务端解析该JSON对象,获取用户身份;6、服务端可以不必存储该JSON(Token)对象,身份信息都可以解析出来。
2、JWT结构说明
抓一只鲜活的Token过来。
{ "msg": "验证成功", "code": 200, "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9. eyJzdWIiOiJhZG1pbiIsImlhdCI6iZEIj3fQ. uEJSJagJf1j7A55Wwr1bGsB5YQoAyz5rbFtF"}上面的Token被手动格式化了,实际上是用"."分隔的一个完整的长字符串。
JWT结构
1、头部(header) 声明类型以及加密算法;2、负载(payload) 携带一些用户身份信息;3、签名(signature) 签名信息。
3、JWT使用方式
通常推荐的做法是客户端在 HTTP 请求的头信息Authorization字段里面。
Authorization: Bearer
服务端获取JWT方式
String token = request.getHeader("token");三、与SpringBoot2整合
1、核心依赖文件
io.jsonwebtoken jjwt 0.7.0
2、配置文件
server: port: 7009spring: application: name: ware-jwt-tokenconfig: jwt: # 加密密钥 secret: iwqjhda8232bjgh532[cicada-smile] # token有效时长 expire: 3600 # header 名称 header: token
3、JWT配置代码块
@ConfigurationProperties(prefix = "config.jwt")@Componentpublic class JwtConfig { /* * 根据身份ID标识,生成Token */ public String getToken (String identityId){ Date nowDate = new Date(); //过期时间 Date expireDate = new Date(nowDate.getTime() + expire * 1000); return Jwts.builder() .setHeaderParam("typ", "JWT") .setSubject(identityId) .setIssuedAt(nowDate) .setExpiration(expireDate) .signWith(SignatureAlgorithm.HS512, secret) .compact(); } /* * 获取 Token 中注册信息 */ public Claims getTokenClaim (String token) { try { return Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody(); }catch (Exception e){ e.printStackTrace(); return null; } } /* * Token 是否过期验证 */ public boolean isTokenExpired (Date expirationTime) { return expirationTime.before(new Date()); } private String secret; private long expire; private String header; // 省略 GET 和 SET}四、Token拦截案例
1、配置Token拦截器
@Componentpublic class TokenInterceptor extends HandlerInterceptorAdapter { @Resource private JwtConfig jwtConfig ; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 地址过滤 String uri = request.getRequestURI() ; if (uri.contains("/login")){ return true ; } // Token 验证 String token = request.getHeader(jwtConfig.getHeader()); if(StringUtils.isEmpty(token)){ token = request.getParameter(jwtConfig.getHeader()); } if(StringUtils.isEmpty(token)){ throw new Exception(jwtConfig.getHeader()+ "不能为空"); } Claims claims = jwtConfig.getTokenClaim(token); if(claims == null || jwtConfig.isTokenExpired(claims.getExpiration())){ throw new Exception(jwtConfig.getHeader() + "失效,请重新登录"); } //设置 identityId 用户身份ID request.setAttribute("identityId", claims.getSubject()); return true; }}2、拦截器注册
@Configurationpublic class WebConfig implements WebMvcConfigurer { @Resource private TokenInterceptor tokenInterceptor ; public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(tokenInterceptor).addPathPatterns("/**"); }}3、测试接口代码
@RestControllerpublic class TokenController { @Resource private JwtConfig jwtConfig ; // 拦截器直接放行,返回Token @PostMapping("/login") public Map login (@RequestParam("userName") String userName, @RequestParam("passWord") String passWord){ Map result = new HashMap<>() ; // 省略数据源校验 String token = jwtConfig.getToken(userName+passWord) ; if (!StringUtils.isEmpty(token)) { result.put("token",token) ; } result.put("userName",userName) ; return result ; } // 需要 Token 验证的接口 @PostMapping("/info") public String info (){ return "info" ; }} 以上是"SpringBoot2如何整合JWT框架解决Token跨域验证问题"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
服务
验证
客户
客户端
服务器
身份
用户
信息
认证
对象
问题
整合
数据
篇文章
拦截器
配置
框架
代码
内容
密码
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
分离数据库文件在哪里
甘肃省bim软件开发工程
河北pdu服务器电源可以定制吗
北京标准机架服务器生产商
阜新装修网络安全
建立人资源数据库
网络技术人员
腐蚀steam怎么创服务器
上海性能优良网络技术
农产品软件开发
网络技术辅导差生
静安区推广软件开发有哪些
公安院校网络安全与技术
软件开发扫码输入身份证
东天众网络技术有限公司
软件开发可以从事的岗位
软件开发适合女生吗
梦幻西游平转服务器哪个区好点
坦克世界服务器准星开启
管理软件开发的单位
戴尔服务器设置
安卓app服务器
mysql综合服务器
数据库免费账号密码
选择数据库stu的命令
雨天滤镜软件开发
游戏服务器运营要多少钱
广州乐豆网络技术有限公司
中原网络安全研究院招生情况
网络安全黑客入侵率