JWT令牌

简介: JWT令牌

一种已定的规则,用于生成token令牌,里面包含用户信息

jwt生成的字符串包含三部分

  • jwt头信息
  • 有效载荷,包含主体信息
  • 签名哈希:字符串的一个防伪标志

使用方法

引入依赖

<!-- JWT-->
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt</artifactId>
</dependency>

导入jwt工具类JwtUtils

 

MD5加密

md5是一种加密技术,它是不可逆的,只能加密不能解密

登陆实现流程

后端

service

@Service
public class UcenterMemberServiceImpl extends ServiceImpl<UcenterMemberMapper, UcenterMember> implements UcenterMemberService {
    @Autowired
    private RedisTemplate<String,String> redisTemplate;
    public static final String DEFAULT_AVATOR = "https://typora-images-1307135242.cos.ap-beijing.myqcloud.com/images/image-20230516110501589.png";
    @Override
    public String login(LoginVO loginVO) {
        //获取登陆的手机号和密码
        String mobile = loginVO.getMobile();
        String password = MD5.encrypt(loginVO.getPassword());
        if (StringUtils.isEmpty(mobile)|| StringUtils.isEmpty(password))throw new GuliException(20001,"登陆失败");
        //判断手机号是否正确
        LambdaQueryWrapper<UcenterMember> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.eq(UcenterMember::getMobile,mobile);
        UcenterMember dbMember = baseMapper.selectOne(lambdaQueryWrapper);
        if (dbMember == null) throw new GuliException(20001,"改手机号还未注册,请先注册");
        if (dbMember.getIsDisabled() == 1)throw new GuliException(20001,"账户被禁用不能的登陆");
        if (!password.equals(dbMember.getPassword()))throw new GuliException(20001,"密码不正确");
        //登陆成功
        String token = JwtUtils.getJwtToken(dbMember.getId(), dbMember.getMobile());
        return token;
    }

controller

  @Autowired
    private UcenterMemberService memberService;
    //登陆
    @PostMapping("login")
    public R loginUser(@RequestBody LoginVO loginVO){
        //调用service方法实现登陆
        //返回一个token使用jwt生成
        String token = memberService.login(loginVO);
        return R.ok().data("token",token);
    }

前端

安装

npm install --save js-cookie

配置request 给每个请求加入过滤器,也就是说每次前端向后端发送请求必须携带token,没有token就是没有登陆,可以将其跳转到登陆界面

import axios from 'axios'
import cookie from 'js-cookie'
// 创建axios实例
const service = axios.create({
  baseURL: 'http://localhost:9001', // api的base_url
  timeout: 20000 // 请求超时时间
})
// http request 拦截器
service.interceptors.request.use(
  config => {
  // debugger
    if (cookie.get('guli_token')) {
      config.headers['token'] = cookie.get('guli_token')
    }
    return config
  },
  err => {
    return Promise.reject(err)
  })

login.js

import request from '@/utils/request'
export default {
  // 登录
  submitLogin(userInfo) {
    return request({
      url: `/ucenterservice/ucenterMember/login`,
      method: 'post',
      data: userInfo
    })
  },
  // 根据token获取用户信息
  getLoginInfo() {
    return request({
      url: `/ucenterservice/ucenterMember/getMemberInfo`,
      method: 'get'
      // headers: { 'token': cookie.get('guli_token') }
    })
    // headers: {'token': cookie.get('guli_token')}
  }
}

调用

 submitLogin() {
      loginApi.submitLogin(this.user).then(response => {
        if (response.data.success) {
          // 把token存在cookie中、也可以放在localStorage中
          cookie.set('guli_token', response.data.data.token, { domain: 'localhost' })
          // 登录成功根据token获取用户信息
          loginApi.getLoginInfo().then(response => {
            this.loginInfo = response.data.data.userInfo
            // 将用户信息记录cookie
            cookie.set('guli_ucenter', JSON.stringify(this.loginInfo), { domain: 'localhost' })
            // 跳转页面
            window.location.href = '/'
          })
        }
      })
    },
相关文章
|
2天前
|
JSON 安全 程序员
[JavaWeb]——JWT令牌技术,如何从获取JWT令牌
[JavaWeb]——JWT令牌技术,如何从获取JWT令牌
|
2天前
|
存储 JSON 算法
SpringBoot之JWT令牌校验
SpringBoot之JWT令牌校验
21 2
|
2天前
|
JSON 前端开发 Java
JWT解密:探秘令牌魔法与Java的完美交互
JWT解密:探秘令牌魔法与Java的完美交互
27 0
JWT解密:探秘令牌魔法与Java的完美交互
|
2天前
|
JSON 前端开发 Java
|
2天前
|
JSON 安全 Java
JWT令牌技术
JSON Web Token (JWT) 是一种安全的、自包含的信息传输格式,常用于身份验证和信息交换。它由Header、Payload和Signature三部分组成,其中Signature用于验证消息完整性和发送者身份。JWT包含用户信息,服务器登录后发送给客户端,客户端使用JWT证明身份访问受保护资源。在Java项目中,可以使用`java-jwt`库进行JWT的生成和解析。要开始使用JWT,需在Maven或Gradle中添加相关依赖,并实现生成和解析JWT的方法。此外,文中还提供了一个简单的Java Web应用示例,展示如何在用户登录和访问受保护资源时使用JWT。
46 0
|
2天前
|
前端开发 Java Spring
SpringBoot通过拦截器和JWT令牌实现登录验证
该文介绍了JWT工具类、匿名访问注解、JWT验证拦截器的实现以及拦截器注册。使用`java-jwt`库生成和验证JWT,JwtUtil类包含generateToken和verifyToken方法。自定义注解`@AllowAnon`允许接口匿名访问。JwtInterceptor在Spring MVC中拦截请求,检查JWT令牌有效性。InterceptorConfig配置拦截器,注册并设定拦截与排除规则。UserController示例展示了注册、登录(允许匿名)和需要验证的用户详情接口。
240 1
|
2天前
JWT令牌的使用
JWT令牌的使用
56 0
|
2天前
|
存储 JSON 算法
登录认证-登录校验-会话技术方案选择和对比(cookie、session和JWT令牌)
登录认证-登录校验-会话技术方案选择和对比(cookie、session和JWT令牌)
|
6月前
|
存储 安全 前端开发
深入探讨安全验证:OAuth2.0、Cookie与Session、JWT令牌、SSO与开放授权平台设计
这篇文章讨论了认证和授权的概念,并探讨了设计权限认证框架的原则。它还比较了Cookie和Session的区别,并探讨了处理分布式部署时的Session保存问题。此外,文章还介绍了CSRF攻击及其防范方法,以及OAuth2.0、JWT令牌和SSO的概念。最后,文章提出了设计开放授权平台时需要考虑的因素。
103 0
深入探讨安全验证:OAuth2.0、Cookie与Session、JWT令牌、SSO与开放授权平台设计
|
7月前
|
Java
Lua识别Jwt令牌业务
Lua识别Jwt令牌业务
272 0