会话跟踪——JWT令牌

这篇具有很好参考价值的文章主要介绍了会话跟踪——JWT令牌。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • 会话指的是浏览器与服务器之间的一次连接,我们称之为一次会话。
    • 在用户打开浏览器第一个访问服务器的时候,这个会话就建立了,只要有任何一方断开连接,此时会话就结束了。再一次会话中是可以包含多次请求和相应。
  • 那什么是会话跟踪呢?
    • 会话跟踪是一种维护浏览器状态的方法,服务器需要识别请求是否来自同一浏览器,一遍在同一次会话的多次请求间共享数据。而识别多次请求是否来自同一浏览器的过程,我们称之为会话跟踪。
  • 什么是令牌技术?
    • 令牌呢就是一个用户身份的表示,看似很高大上非常神秘,其实本质就是一个字符串。
    • 通过令牌技术跟踪会话,我们就可以在浏览器发起请求。登录接口成功生成令牌,在响应数据的时候就直接将令牌响应给前段。
    • 前段接受到令牌就需要存储起来
    • 后续每次请求都要将令牌携带到服务端,来校验令牌的有效性。令牌有效证明已经执行了登录操作,令牌无效证明并未执行登录操作。
    • 优点:
      • 支持PC端、移动端
      • 解决集群环境下的认证问题
      • 减轻服务器的存储压力(无需再服务器端存储)
    • 缺点:
      • 需要自己实现(包括令牌的生成、传递、校验)
  • JWT介绍(JSON Web Token)
    • 就是一个简单的字符串,可以在请求参数或者是请求头当中直接传递。
    • 自包含:JWT令牌,看似是一个随机的字符串,但是我们是可以根据自身的需求唉JWT令牌中存储自定义的数据类容。
  • JWT组成

     文章来源地址https://www.toymoban.com/news/detail-408545.html

    • Header(头),记录令牌类型、签名算法等
    • PayLoad(有效载荷),携带一些自定义信息,默认信息等
    • Signature(签名),防止Token被篡改,确保含安全性
    • 会话跟踪——JWT令牌
  • 介绍完这么多正题来啦,要想使用JWT令牌,首先引入JWT的依赖:
    • <!-- JWT依赖-->
      <dependency>
          <groupId>io.jsonwebtoken</groupId>
          <artifactId>jjwt</artifactId>
          <version>0.9.1</version>
      </dependency>
  • 添加Jwt工具类 
    • public class JwtUtils {
      
          private static String signKey = "itheima";//签名密钥
          private static Long expire = 43200000L; //有效时间
      
          /**
           * 生成JWT令牌
           * @param claims JWT第二部分负载 payload 中存储的内容
           * @return
           */
          public static String generateJwt(Map<String, Object> claims){
              String jwt = Jwts.builder()
                      .addClaims(claims)//自定义信息(有效载荷)
                      .signWith(SignatureAlgorithm.HS256, signKey)//签名算法(头部)
                      .setExpiration(new Date(System.currentTimeMillis() + expire))//过期时间
                      .compact();
              return jwt;
          }
      
          /**
           * 解析JWT令牌
           * @param jwt JWT令牌
           * @return JWT第二部分负载 payload 中存储的内容
           */
          public static Claims parseJWT(String jwt){
              Claims claims = Jwts.parser()
                      .setSigningKey(signKey)//指定签名密钥
                      .parseClaimsJws(jwt)//指定令牌Token
                      .getBody();
              return claims;
          }
      }
  •   引用完依赖后,调用工具类中提供的API来完成JWT令牌的生成和校验
    •    
      @RestController
      @Slf4j
      public class LoginController {
          //依赖业务层对象
          @Autowired
          private EmpService empService;
      
          @PostMapping("/login")
          public Result login(@RequestBody Emp emp) {
              //调用业务层:登录功能
              Emp loginEmp = empService.login(emp);
      
              //判断:登录用户是否存在
              if(loginEmp !=null ){
                  //自定义信息
                  Map<String , Object> claims = new HashMap<>();
                  claims.put("id", loginEmp.getId());
                  claims.put("username",loginEmp.getUsername());
                  claims.put("name",loginEmp.getName());
      
                  //使用JWT工具类,生成身份令牌
                  String token = JwtUtils.generateJwt(claims);
                  return Result.success(token);
              }
              return Result.error("用户名或密码错误");
          }
      }

到了这里,关于会话跟踪——JWT令牌的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • web会话跟踪以及JWT响应拦截机制

    目录 JWT 会话跟踪 token 响应拦截器 http是无状态的,登录成功后,客户端就与服务器断开连接,之后再向后端发送请求时,后端需要知道前端是哪个用户在进行操作。 Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一 种基于 JSON 的开放标准((RFC 7519).定义了一种简

    2024年02月13日
    浏览(36)
  • web学习--登录认证--会话技术--cookie--session--令牌--java-jwt使用--jjwt使用

    前置学习: http springmvc 会话:用户打开浏览器,访问web服务器资源,会话建立,直到有一方断开连接会话结束,一次会话可以多次请求和连接 会话跟踪:一种维护浏览器状态的方式,服务器需要识别多次请求是否来自同一浏览器,以便同一次会话多次请求间共享数据。 cooki

    2024年02月15日
    浏览(64)
  • 为chrome浏览器单独设置代理服务器

    默认的chrome浏览器的代理服务器都是采用的PC设置, 但是有的时候在某一些情况下我们不希望使用PC的设置, 懂得都懂,那就需要让chrome不走PC的代理 只要下载一个chrome的插件, proxyswitchOmega, 然后设置好代理,enable这个插件就可以了 插件下载地址国内的可以用如下地址:

    2024年02月11日
    浏览(101)
  • 浏览器与服务器通信过程(HTTP协议)

    目录 1 概念 2 常见的 web 服务器有 3 浏览器与服务器通信过程 3.1 DNS 3.2 URL 4 HTTP请求方法和应答状态码 4.1 HTTP请求报文段实例 4.2 HTTP请求方法 5 HTTP应答报头和应答状态 5.1 HTTP的应答报头结构 5.2 HTTP的应答状态 浏览器与 web 服务器在 应用层 通信使用的是 HTTP 协议(超文本传输协

    2024年03月16日
    浏览(56)
  • nodejs配置express服务器,运行自动打开浏览器

    查看专栏目录 Network 灰鸽宝典专栏主要关注服务器的配置,前后端开发环境的配置,编辑器的配置,网络服务的配置,网络命令的应用与配置,windows常见问题的解决等。 作为前端开发的项目,有的时候打包完后就想在本地测试是什么样子的,另外一些如cesium等程序,需要在

    2024年02月04日
    浏览(52)
  • 电脑有网但是浏览器无法连接到服务器

    一、将服务器的IP地址和DNS地址设置为自动获取 。 1、鼠标右键点击网络,打开“网络和Internet设置”  2、打开“更改适配器选项” 3、选择电脑此时连接的网络,右键点击选择“ 属性 ”  4、双击选择 Internet协议版本4(TCP/IPv4) 5、将下面这两项都选为 自动获得。    5、一路点

    2024年02月05日
    浏览(47)
  • JavaWeb-WebSocket浏览器服务器双向通信

    WebSocket是基于TCP的一种新的网络协议。它实现了浏览器与服务器 全双工通信 —浏览器和服务器只需要完成一次握手,两者之间就可以创建 持久性 的连接,并进行双向数据传输。 HTTP传输 WebSocket传输 HTTP协议和WebSocket协议的对比: HTTP是短连接,WebSocket是长连接 HTTP通信是单向

    2024年01月21日
    浏览(45)
  • 服务器上配置jupyter并使用浏览器远程连接

    执行两条安装命令: 通过这个命令创建就在**~/.jupyter/**下面生成了配置文件jupyter_notebook_config.py 输入的密码会保存到 .jupyter/jupyter_notebook_config.json文件中 在配置文件~/.jupyter/jupyter_notebook_config.py中找到下面几行修改并且取消注释 建立一个目录workspace作为jupyter的工作环境,并启

    2024年02月09日
    浏览(48)
  • 使用ssh隧道连接远程服务器本地浏览器上网

    1,终端输入命令 ssh -N -D 127.0.0.1:8080 remote_server_name@remote_server_ip_address remote_server_name 参数是远程服务器的用户名 remote_server_ip_address 参数是远程服务器的IP地址 -N 参数表示只建立 SSH 连接,而不启动远程 shell。通常用于只想建立端口转发或隧道的情况下,以避免不必要的远程

    2024年02月13日
    浏览(48)
  • 初识http协议,简单实现浏览器和服务器通信

    平时俗称的 “网址” 其实就是说的 URL,例如在百度上搜索一个C++ 可以看到这段网址前面有个 https 那么这个就代表着使用的是https协议,现在都是使用https协议,不过还是需要认识以下http协议 像 / ? : 等这样的字符, 已经被url当做特殊意义理解了. 因此这些字符不能随意出现。

    2024年02月14日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包