JWT实现单点登录(SpringBoot + Vue +axious)

准备阶段:

**登录所需对象**
admin{
"username":"",  //作为Token
"password":"",  //作为签名
"nicakname":"",
"avatar":"",
}

开始阶段

1.导包

  
  <dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>3.10.3</version></dependency>

2.创建一个TokenUtils(放在util包下)

public class TokenUtils {public static String getToken(admin admin){String token="";token= JWT.create().withAudience(admin.getUsername()) // 将 username 保存到 token 里面.withExpiresAt(DateUtil.offsetHour(new Date(),1)) //1小时后token过期(DateUtil是hutool包下的).sign(Algorithm.HMAC256(admin.getPassword())); // 以 password 作为 oken的密钥,默认用HMAC256加密return token;}
}

3.在admin的相应controller下创建login方法

@PostMapping("/login")//  1.接收前端传来的登录前Json对象public Result login(@RequestBody admin admin){String username = admin.getUsername();String password = admin.getPassword();if (username == "" || password == "") {throw new ServiceException(Constants.CODE_401,"没有输入");}
​//  2.进行登录操作,验证数据库是否有该对象,并得到登录后对象com.pinkman.management.entity.admin loginAdmin = adminService.login(admin);
​//  3.将Token设置进登录后对象String token = TokenUtils.getToken(loginAdmin);loginAdmin.setToken(token);//  4.返回给前端return new Result(adminService.login(admin) == null?Constants.CODE_200:Constants.CODE_401,"成功",loginAdmin);}

前端阶段

1.前端登录方法

login() {var user = {username: this.username,password: this.password,};
​this.request.post("http://localhost:8888/admin/login", user).then((res) => {console.log(res);if (res.code == "401") {​localStorage.setItem("user", JSON.stringify(res.data));//储存Token信息localStorage.setItem("token", res.data.token);
​this.$router.push("/");} else {this.$message.error("用户名或密码错误");}});

tips:前端传给后端时候,正确token:xxx.yyy.zzz,不正确token:"xxx.yyy.zzz"

成功写入本地存储:

2.在前端Vue集成的项目中对axious进行配置

import axios from 'axios'
// request 拦截器
// 可以自请求发送前对请求做一些处理
// 比如统一加token,对请求参数统一加密
request.interceptors.request.use(config => {config.headers['Content-Type'] = 'application/json;charset=utf-8';//  在这里拿到Token信息并且写入到请求的头中去config.headers['token'] = localStorage.getItem("token");return config
}, error => {return Promise.reject(error)
});

Token成功写入请求头

验证阶段

1.前端发送任意带token的请求给后端

2.在后端的config包下的interceptor包下配置相应拦截器(配置校验规则)

@Component
public class JwtHandlerInterceptor implements org.springframework.web.servlet.HandlerInterceptor {
​@Autowiredprivate adminService adminService;
​@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {String token = request.getHeader("token");//  0.如果不是映射方法,则直接通过if (!(handler instanceof HandlerMethod)) {return true;}
​//  1.先通过token获取相应的用户名if (StringUtils.isBlank(token)) {throw new ServiceException(Constants.CODE_401,"无Token,请先登录");}String username;try{username = JWT.decode(token).getAudience().get(0);}catch (JWTDecodeException j){throw new ServiceException(Constants.CODE_401,"Token验证失败");}
​
​
​//  2.根据获取到的用户名查询数据库是否存在该用户admin admin = adminService.getAdminByName(username);if (admin == null) {throw new ServiceException(Constants.CODE_401,"用户不存在");}//  用户密码加签 验证TokenJWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(admin.getPassword())).build();
​
​//  3.若存在,则对签名进行核验try {
​jwtVerifier.verify(token);  //  验证token} catch (JWTVerificationException e) {e.printStackTrace();}System.out.println("成功验证");//  4.核验完成则返回truereturn true;
​}
}

3.在后端的config包下创建拦截器JwtInterceptorConfig配置(让服务器知道拦截器的存在)

//  1.配置注解
@Configuration
//  2.实现WebMvcConfigurer接口
public class InterceptorConfig implements WebMvcConfigurer {
​@Beanpublic JwtHandlerInterceptor getJwtHandlerInterceptor(){return new JwtHandlerInterceptor();}//  3.重写方法,将jwt拦截器注册进拦截器注册中心(让web应用上下文知道拦截器的存在)@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(getJwtHandlerInterceptor()).addPathPatterns("/**")    //   拦截所有请求,通过判断token是否合法来决定是否登录.excludePathPatterns("/admin/login");     // 排除部分,如,登录请求(必须排除),导入请求,导出请求}
}

tips:拦截器在初始化时候记得放进spring容器中

[业务流程]JWT实现单点登录(SpringBoot + Vue +axious)相关推荐

  1. springBoot整合spring security+JWT实现单点登录与权限管理前后端分离

    在前一篇文章当中,我们介绍了springBoot整合spring security单体应用版,在这篇文章当中,我将介绍springBoot整合spring secury+JWT实现单点登录与权限管理. ...

  2. springBoot整合spring security+JWT实现单点登录与权限管理前后端分离--筑基中期

    写在前面 在前一篇文章当中,我们介绍了springBoot整合spring security单体应用版,在这篇文章当中,我将介绍springBoot整合spring secury+JWT实现单点登录与 ...

  3. JWT实现单点登录(sso)功能

    单点登录描述: 单点登录主要时应用在微服务架构中,在任意一个子服务中输入用户的用户名,密码进行登录时, 在跳转到其他系统的时候,就无需在进行登录,直接可以识别出用户的身份,权限以及角色等信息 . . ...

  4. Spring Cloud入门-Oauth2授权之基于JWT完成单点登录(Hoxton版本)

    文章目录 Spring Cloud入门系列汇总 摘要 单点登录简介 创建oauth2-client模块 修改授权服务器配置 网页单点登录演示 调用接口单点登录演示 oauth2-client添加权限校 ...

  5. 基于Spring Security与JWT实现单点登录

    基于RBAC的权限管理 RBAC(Role-Based Access Control):基于角色的访问控制 当前项目中,RBAC具体的表现为: 管理员表:ams_admin 角色表:ams_role ...

  6. SpringSecurity+OAuth2.0+JWT实现单点登录应用

    SpringSecurity+OAuth2.0+JWT实现单点登录应用 gitee项目练习地址:https://gitee.com/xzq25_com/springsecurity.oauth2 OA ...

  7. springsecurity oauth2使用jwt实现单点登录

    Jwt方式已经分享在文章结尾处的百度网盘链接中,redis方式可以看我以前发表的文章. 文章目录 前言 一.springsecurity oauth2 + redis方式的缺点 二.oauth2认证的 ...

  8. SpringBoot+OAuth2+JWT实现单点登录SSO完整教程,竟如此简单优雅!

    作者:狂乱的贵公子 来源:https://www.cnblogs.com/cjsblog/p/10548022.html 1.前言 技术这东西吧,看别人写的好像很简单似的,到自己去写的时候就各种问题, ...

  9. JWT实现单点登录(SSO)

    目录 一.理论 1.SSO 2.JWT #.组成 #.如何工作 3.Redis   RSA   MD5 4.AOP 二.实现过程 #.准备工作 #.登录 #.测试类 #.插拔式注解 #.测试 最近有机 ...

最新文章

  1. OpenJDK官方正式宣布AWT、2D、Swing等项目解散
  2. tcp ssl java_SSL的TCP通信
  3. 没想到,因为这场AI大会,我也可以凡尔赛一把
  4. 前端解析Excel文件js-xlsx与bootstrapTable
  5. Airbnb: React Native 从选择到放弃
  6. 创新设计模式:抽象工厂模式
  7. flatMap()与concatMap()与concatMapEager()– RxJava常见问题解答
  8. python tkinter滚动条不起作用_Tkinter滚动条不工作
  9. 返回一个二维整数数组中最大子数组的和(二人结对)
  10. 如何用MEF实现Asp.Net MVC框架
  11. C++面试高频考点整理--基础
  12. (转)正则表达之零宽断言(零宽度正预测先行断言)
  13. 软件质量(六大要素及其分析)
  14. K8S异常 sonar status is ‘PENDING’
  15. laragon 更换php的版本
  16. 2022年保育员(初级)考题及答案
  17. 设计模式--04模板方法模式
  18. 蓝桥杯算法很美笔记—排序实现题
  19. 心电图ECG常用滤波器之陷波器
  20. visio 神经网络结构图

热门文章

  1. 综合布线系统工程中计算机插座的标识符号是,TD是综合布线系统工程中计算机插座的标识符号。...
  2. 微信小程序图片自动播放功能
  3. 某海外电商平台参数分析 ECDSA签名(js逆向)
  4. 【建议收藏】新到手的电脑Windows10/11系统优化、使用规范和技巧及软件推荐,提升范电脑性能和体验
  5. 网站中PV、UV、IP的区别
  6. html5 代码画兰博基尼跑车,6不6你说的算!
  7. 2015合肥市第 32 届青少年信息学(计算机)奥林匹克竞赛小学组试题
  8. python xlrd导入后怎么保存_pythonxlrd导入.xslx模板,使用Openpyxl编辑并重新保存.xslx-Fi...
  9. 微信java tools_微信工具weixin-java-tools的使用总结
  10. 春秋战国开局名臣搭配推荐