JWT认识及实现

目录

一、Jwt了解

 二、jwt实现


一、Jwt了解

 jwt是什么?

JSON Web Token (JWT),它是目前最流行的跨域身份验证解决方案

 为什么使用它?

 JWT的精髓在于:“去中心化”,数据是保存在客户端的。

 由什么组成?

一个JWT实际上就是一个字符串,它由三部分组成:头部(Header)、载荷(Payload)与签名(signature)

JWT运用原理、机制:(面试题)

1.第一次发送登录请求,必然会携带用户信息uname和pwd。

2.通过用户信息uname和pwd登录成功,会将用户信息通过jwt工具生成一个加密的字符串。

3.加密字符串,会以response header响应头形式响应至前端。

4.前端服务器会有响应拦截器拦截,截取到响应头承载的jwt串,又会放到vuex中。

5.当第二次请求,前端服务器中有一个请求拦截器,会将vuex的jwt串放入request header 请求头中。

6.当请求通过跨域的方式到达后台服务器,后台服务器中又有一个过滤器,会截取的jwt串中。

7.jwt工具类会对jwt串进行解析,解析成用户信息,最终进行校验。


 二、jwt实现

 后台代码

useraction

package com.zking.vue.web;

import java.util.HashMap;
import java.util.Map;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.opensymphony.xwork2.ModelDriven;
import com.zking.base.web.BaseAction;
import com.zking.vue.biz.UserBiz;
import com.zking.vue.entity.User;
import com.zking.vue.util.JsonData;
import com.zking.vue.util.JwtUtils;
import com.zking.vue.util.PageBean;
import com.zking.vue.util.ResponseUtil;
import com.zking.vue.util.StringUtils;

public class UserAction extends BaseAction implements ModelDriven<User>{

    private UserBiz userBiz;
    private User user = new User();

    public UserBiz getUserBiz() {
        return userBiz;
    }

    public void setUserBiz(UserBiz userBiz) {
        this.userBiz = userBiz;
    }
     
    public String login() {
        ObjectMapper om = new ObjectMapper();
        JsonData jsonData = null;
        try {
            if(StringUtils.isBlank(user.getUname()) || StringUtils.isBlank(user.getPwd())) {
                jsonData = new JsonData(0, "用户或者密码为空", user);
            }else {
                
                User u = this.userBiz.login(user);
                Map<String, Object> claims = new HashMap<String, Object>();
                claims.put("uname",user.getUname());
                claims.put("pwd", user.getPwd());
                String jwt = JwtUtils.createJwt(claims, JwtUtils.JWT_WEB_TTL);
                response.setHeader(JwtUtils.JWT_HEADER_KEY, jwt);
                jsonData = new JsonData(1, "登录成功", u);

            }
        } catch (Exception e) {
            e.printStackTrace();
            jsonData = new JsonData(0, "用户或者密码错误", user);
        }finally {
            try {
                ResponseUtil.write(response, om.writeValueAsString(jsonData));
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        
        return null;
    }
    
    public String getAsyncData() {
        ObjectMapper om = new ObjectMapper();
        try {
            Thread.sleep(6000);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值