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 = '/'
          })
        }
      })
    },
相关文章
|
6月前
|
存储 JSON 安全
JWT令牌详解
JWT令牌详解
184 3
|
2月前
|
存储 JSON 算法
JWT令牌基础教程 全方位带你剖析JWT令牌,在Springboot中使用JWT技术体系,完成拦截器的实现 Interceptor (后附源码)
文章介绍了JWT令牌的基础教程,包括其应用场景、组成部分、生成和校验方法,并在Springboot中使用JWT技术体系完成拦截器的实现。
116 0
JWT令牌基础教程 全方位带你剖析JWT令牌,在Springboot中使用JWT技术体系,完成拦截器的实现 Interceptor (后附源码)
|
4月前
|
JSON Java API
【Azure Developer】如何验证 Azure AD的JWT Token (JSON Web 令牌)?
【Azure Developer】如何验证 Azure AD的JWT Token (JSON Web 令牌)?
102 0
|
7月前
|
JSON 安全 程序员
[JavaWeb]——JWT令牌技术,如何从获取JWT令牌
[JavaWeb]——JWT令牌技术,如何从获取JWT令牌
118 0
JWT令牌,JWT令牌的后续使用,在其他端口中使用的注意事项?如果你编写了JWT令牌的话,在下一次请求当中,都需要添加的,如果你已经配置好了WebConfig和Inter 就不用配了,添加了拦截器之后
JWT令牌,JWT令牌的后续使用,在其他端口中使用的注意事项?如果你编写了JWT令牌的话,在下一次请求当中,都需要添加的,如果你已经配置好了WebConfig和Inter 就不用配了,添加了拦截器之后
|
6月前
|
JSON 前端开发 数据格式
关于JWT令牌和过滤器以及拦截器的实现流程
JWT令牌用于验证用户请求合法性,登录时通过Filter或Interceptor校验账号密码,生成JWT并返回给前端保存。请求时,后端通过解析令牌检查其完整性、时效性和合法性。Filter在请求处理前检查是否携带JWT,Interceptor的preHandle方法同样用于此目的。两者选择其一即可,拦截器配置更精确但稍复杂。
|
7月前
|
存储 JSON 算法
SpringBoot之JWT令牌校验
SpringBoot之JWT令牌校验
|
7月前
|
JSON 前端开发 Java
|
7月前
|
JSON 前端开发 Java
JWT解密:探秘令牌魔法与Java的完美交互
JWT解密:探秘令牌魔法与Java的完美交互
85 0
JWT解密:探秘令牌魔法与Java的完美交互
|
7月前
|
前端开发 Java Spring
SpringBoot通过拦截器和JWT令牌实现登录验证
该文介绍了JWT工具类、匿名访问注解、JWT验证拦截器的实现以及拦截器注册。使用`java-jwt`库生成和验证JWT,JwtUtil类包含generateToken和verifyToken方法。自定义注解`@AllowAnon`允许接口匿名访问。JwtInterceptor在Spring MVC中拦截请求,检查JWT令牌有效性。InterceptorConfig配置拦截器,注册并设定拦截与排除规则。UserController示例展示了注册、登录(允许匿名)和需要验证的用户详情接口。
980 1

热门文章

最新文章