• 什么是JWT?


    目录

    一、jwt出现的原因及工作原理

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

    2. 为什么使用jwt   jwt的精髓在于:“去中心化”,数据是保存在客户端的。

    二、jwt与vuex配合在SPA项目中的应用

    jwt实现


    一、jwt出现的原因及工作原理

    session的存储机制

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


    2. 为什么使用jwt
       jwt的精髓在于:“去中心化”,数据是保存在客户端的。

     

    3、jwt运行机制/原理    ******
    1、第一次发送登录请求,必然会携带用户信息uname和pwd

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

    3、加密字符串 会以response header 响应头的形式 相应到前端

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

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

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

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

     

    二、jwt与vuex配合在SPA项目中的应用

    jwt实现

    现在我们没使用到jwt的时候,我们的项目还能够正常访问到:

     【JwtFilter

    1. package com.zking.vue.util;
    2. import java.io.IOException;
    3. import java.util.regex.Matcher;
    4. import java.util.regex.Pattern;
    5. import javax.servlet.Filter;
    6. import javax.servlet.FilterChain;
    7. import javax.servlet.FilterConfig;
    8. import javax.servlet.ServletException;
    9. import javax.servlet.ServletRequest;
    10. import javax.servlet.ServletResponse;
    11. import javax.servlet.http.HttpServletRequest;
    12. import javax.servlet.http.HttpServletResponse;
    13. import io.jsonwebtoken.Claims;
    14. /**
    15. * * JWT验证过滤器,配置顺序 :CorsFilte-->JwtFilter-->struts2中央控制器
    16. *
    17. * @author Administrator
    18. *
    19. */
    20. public class JwtFilter implements Filter {
    21. // 排除的URL,一般为登陆的URL(请改成自己登陆的URL)
    22. private static String EXCLUDE = "^/vue/userAction_login\\.action?.*$";
    23. private static Pattern PATTERN = Pattern.compile(EXCLUDE);
    24. private boolean OFF = true;// true关闭jwt令牌验证功能
    25. @Override
    26. public void init(FilterConfig filterConfig) throws ServletException {
    27. }
    28. @Override
    29. public void destroy() {
    30. }
    31. @Override
    32. public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
    33. throws IOException, ServletException {
    34. HttpServletRequest req = (HttpServletRequest) request;
    35. HttpServletResponse resp = (HttpServletResponse) response;
    36. String path = req.getServletPath();
    37. if (OFF || isExcludeUrl(path)) {// 登陆直接放行
    38. chain.doFilter(request, response);
    39. return;
    40. }
    41. // 从客户端请求头中获得令牌并验证
    42. String jwt = req.getHeader(JwtUtils.JWT_HEADER_KEY);
    43. Claims claims = this.validateJwtToken(jwt);
    44. if (null == claims) {
    45. // resp.setCharacterEncoding("UTF-8");
    46. resp.sendError(403, "JWT令牌已过期或已失效");
    47. return;
    48. } else {
    49. String newJwt = JwtUtils.copyJwt(jwt, JwtUtils.JWT_WEB_TTL);
    50. resp.setHeader(JwtUtils.JWT_HEADER_KEY, newJwt);
    51. chain.doFilter(request, response);
    52. }
    53. }
    54. /**
    55. * 验证jwt令牌,验证通过返回声明(包括公有和私有),返回null则表示验证失败
    56. */
    57. private Claims validateJwtToken(String jwt) {
    58. Claims claims = null;
    59. try {
    60. if (null != jwt) {
    61. claims = JwtUtils.parseJwt(jwt);
    62. }
    63. } catch (Exception e) {
    64. e.printStackTrace();
    65. }
    66. return claims;
    67. }
    68. /**
    69. * 是否为排除的URL
    70. *
    71. * @param path
    72. * @return
    73. */
    74. private boolean isExcludeUrl(String path) {
    75. Matcher matcher = PATTERN.matcher(path);
    76. return matcher.matches();
    77. }
    78. // public static void main(String[] args) {
    79. // String path = "/sys/userAction_doLogin.action?username=zs&password=123";
    80. // Matcher matcher = PATTERN.matcher(path);
    81. // boolean b = matcher.matches();
    82. // System.out.println(b);
    83. // }
    84. }

    运行:

    接下把jwt的验证 开启,即在JwtFilter类中:

     再去重启,刷新项目:

    数据访问不到了:

     

      F12检查:

    原因是还没有开始编写jwt。(但是我们的登录和退出功能仍然可以正常运行)。 

  • 相关阅读:
    接口自动化测试之Mock
    Ubuntu22.04 编译 AOSP
    VNC:Timed out waiting for a response from the computer
    P8869 [传智杯 #5 初赛] A-莲子的软件工程学
    前置微小信号放大器在光声技术的血管识别研究中的应用
    安卓蓝牙耳机哪个牌子好?安卓手机蓝牙耳机推荐
    Scratch软件编程等级考试一级——201909
    AppWidget(桌面小部件)
    用ts类型要描述 1到100范围的数字
    在线电子书阅读小程序,微信小程序电子书阅读,微信小程序小说阅读器毕业设计作品
  • 原文地址:https://blog.csdn.net/m0_67094505/article/details/126931985