当前位置: 首页 > news >正文

求职招聘网站排名前十名永州高端网站建设

求职招聘网站排名前十名,永州高端网站建设,武城网站建设价格,网站建设页头的设计14天阅读挑战赛当你累了#xff0c;要学会休息#xff0c;而不是放弃#xff01; 目录 一、JWT简介 1.1 什么是JWT 1.2 为什么要使用JWT#xff0c;与session的区别 1.3 JWT组成及工作原理和流程 二、JWT工具类解析 2.1 生成JWT 2.2 解析oldJwt 2.3 复制JWT并延时…14天阅读挑战赛当你累了要学会休息而不是放弃 目录 一、JWT简介 1.1 什么是JWT 1.2 为什么要使用JWT与session的区别 1.3 JWT组成及工作原理和流程 二、JWT工具类解析 2.1 生成JWT 2.2 解析oldJwt 2.3 复制JWT并延时30分钟 2.4 测试JWT的有效时间 2.5 模拟过期JWT的解析 三、JWT前后端分离在项目中的应用 一、JWT简介 1.1 什么是JWT JWTJSON Web Token是一种用于在网络应用间传递信息的开放标准。它由三部分组成头部Header、载荷Payload和签名Signature。它是目前最流行的跨域身份验证解决方案 头部包含了关于令牌的元数据例如使用的加密算法。载荷包含了实际的用户数据例如用户ID、角色等。签名用于验证令牌的完整性和真实性。 1.2 为什么要使用JWT与session的区别 选择使用JWT而不是传统的会话session机制有几个原因 无状态性JWT是无状态的服务器不需要在数据库中存储会话信息。相反JWT包含了所有必要的信息因此可以在不同的服务器之间轻松传递。这使得JWT非常适合构建分布式系统和微服务架构。 扩展性JWT的载荷Payload可以包含自定义的数据以满足特定的应用需求。这使得JWT非常灵活可以在不同的场景中使用。例如可以将用户角色、权限、过期时间等信息存储在JWT的载荷中。 安全性JWT使用签名进行验证确保令牌的完整性和真实性。服务器可以使用密钥对JWT进行签名以防止篡改。这使得JWT在传输过程中更加安全因为任何对JWT的篡改都会被检测到。 与传统的会话机制相比JWT具有以下区别 存储位置会话机制将会话信息存储在服务器端通常是在内存或数据库中。而JWT将所有必要的信息存储在令牌本身中通常存储在客户端的本地存储或Cookie中。 扩展性会话机制通常只能存储有限的信息例如会话ID和一些基本的用户信息。而JWT的载荷可以包含更多的自定义数据以满足特定的应用需求。 服务器状态会话机制需要服务器维护会话状态包括会话的创建、销毁和管理。而JWT是无状态的服务器不需要维护任何会话状态这使得服务器更加可扩展。 跨域支持由于JWT是在令牌中包含所有必要的信息因此可以轻松地在不同的域之间传递。而会话机制在跨域场景下需要额外的配置和处理。 总的来说JWT提供了更大的灵活性、可扩展性和安全性特别适合构建分布式系统和跨域场景。然而选择使用JWT还是会话机制取决于具体的应用需求和架构设计。 1.3 JWT组成及工作原理和流程 头部Header头部通常由两部分组成令牌的类型typ和所使用的签名算法alg。这些信息以JSON格式进行编码并使用Base64进行编码形成JWT的第一部分。 {typ:JWT,alg:HS256} 载荷Payload载荷包含了实际的用户数据例如用户ID、角色、权限等。载荷也以JSON格式进行编码并使用Base64进行编码形成JWT的第二部分。 {sub:123,name:Tom,admin:true} 签名Signature签名用于验证令牌的完整性和真实性。签名由头部、载荷和密钥组成通过指定的签名算法进行计算。服务器在接收到JWT后使用相同的密钥和算法对头部和载荷进行签名计算并将计算结果与JWT中的签名进行比较以验证令牌的有效性。 JWT的工作原理和流程如下 用户通过提供有效的凭证例如用户名和密码进行身份验证。服务器验证凭证并生成一个JWT作为响应。服务器将JWT发送给客户端通常是作为响应的一部分或存储在Cookie中。客户端收到JWT后将其存储在本地通常是在浏览器的本地存储或Cookie中。客户端在后续的请求中将JWT作为身份验证凭证发送给服务器通常是通过在请求头部中添加Authorization字段并将JWT作为值。服务器接收到请求后从请求头部中获取JWT并使用相同的密钥和算法对头部和载荷进行签名计算。服务器将计算结果与JWT中的签名进行比较以验证令牌的完整性和真实性。如果签名验证成功服务器将处理请求并返回相应的数据。 在整个流程中JWT充当了身份验证和授权的凭证。服务器使用密钥对JWT进行签名以确保令牌的完整性和真实性。客户端在后续的请求中将JWT作为身份验证凭证发送给服务器服务器通过验证签名来验证令牌的有效性。这种方式使得JWT成为一种无状态、可扩展和安全的身份验证和授权机制。 二、JWT工具类解析 package com.ycxw.ssm.jwt;import java.util.Date; import java.util.Map; import java.util.UUID;import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec;import org.apache.commons.codec.binary.Base64;import io.jsonwebtoken.Claims; import io.jsonwebtoken.JwtBuilder; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm;/*** JWT验证过滤器配置顺序 CorsFilte-JwtUtilsr--StrutsPrepareAndExecuteFilter**/ public class JwtUtils {/*** JWT_WEB_TTLWEBAPP应用中token的有效时间,默认30分钟*/public static final long JWT_WEB_TTL 30 * 60 * 1000;/*** 将jwt令牌保存到header中的key*/public static final String JWT_HEADER_KEY jwt;// 指定签名的时候使用的签名算法也就是header那部分jwt已经将这部分内容封装好了。private static final SignatureAlgorithm SIGNATURE_ALGORITHM SignatureAlgorithm.HS256;private static final String JWT_SECRET f356cdce935c42328ad2001d7e9552a3;// JWT密匙private static final SecretKey JWT_KEY;// 使用JWT密匙生成的加密keystatic {byte[] encodedKey Base64.decodeBase64(JWT_SECRET);JWT_KEY new SecretKeySpec(encodedKey, 0, encodedKey.length, AES);}private JwtUtils() {}/*** 解密jwt获得所有声明(包括标准和私有声明)* * param jwt* return* throws Exception*/public static Claims parseJwt(String jwt) {Claims claims Jwts.parser().setSigningKey(JWT_KEY).parseClaimsJws(jwt).getBody();return claims;}/*** 创建JWT令牌签发时间为当前时间* * param claims* 创建payload的私有声明根据特定的业务需要添加如果要拿这个做验证一般是需要和jwt的接收方提前沟通好验证方式的* param ttlMillis* JWT的有效时间(单位毫秒)当前时间有效时间过期时间* return jwt令牌*/public static String createJwt(MapString, Object claims, long ttlMillis) {// 生成JWT的时间即签发时间 2021-10-30 10:02:00 - 30 10:32:00long nowMillis System.currentTimeMillis();//链式语法// 下面就是在为payload添加各种标准声明和私有声明了// 这里其实就是new一个JwtBuilder设置jwt的bodyJwtBuilder builder Jwts.builder()// 如果有私有声明一定要先设置这个自己创建的私有的声明这个是给builder的claim赋值一旦写在标准的声明赋值之后就是覆盖了那些标准的声明的.setClaims(claims)// 设置jti(JWT ID)是JWT的唯一标识根据业务需要这个可以设置为一个不重复的值主要用来作为一次性token,从而回避重放攻击。// 可以在未登陆前作为身份标识使用.setId(UUID.randomUUID().toString().replace(-, ))// iss(Issuser)签发者写死.setIssuer(zking)// iat: jwt的签发时间.setIssuedAt(new Date(nowMillis))// 代表这个JWT的主体即它的所有人这个是一个json格式的字符串可放数据{uid:zs}。此处没放// .setSubject({})// 设置签名使用的签名算法和签名使用的秘钥.signWith(SIGNATURE_ALGORITHM, JWT_KEY)// 设置JWT的过期时间.setExpiration(new Date(nowMillis ttlMillis));return builder.compact();}/*** 复制jwt并重新设置签发时间(为当前时间)和失效时间* * param jwt* 被复制的jwt令牌* param ttlMillis* jwt的有效时间(单位毫秒)当前时间有效时间过期时间* return*/public static String copyJwt(String jwt, Long ttlMillis) {//解密JWT获取所有的声明私有和标准//oldClaims claims parseJwt(jwt);// 生成JWT的时间即签发时间long nowMillis System.currentTimeMillis();// 下面就是在为payload添加各种标准声明和私有声明了// 这里其实就是new一个JwtBuilder设置jwt的bodyJwtBuilder builder Jwts.builder()// 如果有私有声明一定要先设置这个自己创建的私有的声明这个是给builder的claim赋值一旦写在标准的声明赋值之后就是覆盖了那些标准的声明的.setClaims(claims)// 设置jti(JWT ID)是JWT的唯一标识根据业务需要这个可以设置为一个不重复的值主要用来作为一次性token,从而回避重放攻击。// 可以在未登陆前作为身份标识使用//.setId(UUID.randomUUID().toString().replace(-, ))// iss(Issuser)签发者写死// .setIssuer(zking)// iat: jwt的签发时间.setIssuedAt(new Date(nowMillis))// 代表这个JWT的主体即它的所有人这个是一个json格式的字符串可放数据{uid:zs}。此处没放// .setSubject({})// 设置签名使用的签名算法和签名使用的秘钥.signWith(SIGNATURE_ALGORITHM, JWT_KEY)// 设置JWT的过期时间.setExpiration(new Date(nowMillis ttlMillis));return builder.compact();} } 该工具类提供了以下几个方法 parseJwt(String jwt)解密JWT获得所有声明。 参数jwt - 要解密的JWT令牌。返回值包含所有声明的Claims对象。 createJwt(MapString, Object claims, long ttlMillis)创建JWT令牌签发时间为当前时间。 参数claims - 创建payload的私有声明。 ttlMillis - JWT的有效时间单位毫秒。返回值生成的JWT令牌。 copyJwt(String jwt, Long ttlMillis)复制JWT并重新设置签发时间和失效时间。 参数jwt - 被复制的JWT令牌。 ttlMillis - JWT的有效时间单位毫秒。返回值生成的新的JWT令牌。 下面我们对这个工具类进行测试。   2.1 生成JWT private SimpleDateFormat sdf new SimpleDateFormat(yyyy-MM-dd HH:mm:ss.SSS);Testpublic void test1() {// 生成JWTMapString, Object claims new HashMapString, Object();claims.put(username, ycxw);claims.put(age, 18);String jwt JwtUtils.createJwt(claims, JwtUtils.JWT_WEB_TTL);System.out.println(jwt);Claims parseJwt JwtUtils.parseJwt(jwt);for (Map.EntryString, Object entry : parseJwt.entrySet()) {System.out.println(entry.getKey() entry.getValue());}Date d1 parseJwt.getIssuedAt();Date d2 parseJwt.getExpiration();System.out.println(令牌签发时间 sdf.format(d1));System.out.println(令牌过期时间 sdf.format(d2));}在该方法中定义了私有声明claims并设置了一些键值对例如用户名和年龄。然后调用了JwtUtils.createJwt()方法生成JWT并打印输出。  2.2 解析oldJwt Testpublic void test2() {// 解析oldJwtString oldJwt eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NjI5MDMzNjAsImlhdCI6MTU2MjkwMTU2MCwiYWdlIjoxOCwianRpIjoiZDVjMzE4Njg0MDcyNDgyZDg1MDE5ODVmMDY3OGQ4NjkiLCJ1c2VybmFtZSI6InpzcyJ9.XDDDRRq5jYq5EdEBHtPm7GcuBz4S0VhDTS1amRCdf48;Claims parseJwt JwtUtils.parseJwt(oldJwt);for (Map.EntryString, Object entry : parseJwt.entrySet()) {System.out.println(entry.getKey() entry.getValue());}Date d1 parseJwt.getIssuedAt();Date d2 parseJwt.getExpiration();System.out.println(令牌签发时间 sdf.format(d1));System.out.println(令牌过期时间 sdf.format(d2));} 在该方法中使用JwtUtils.parseJwt()方法解析了一个旧的JWT并将解析结果打印输出。 2.3 复制JWT并延时30分钟 Testpublic void test3() {// 复制jwt并延时30分钟String oldJwt \t\teyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJ4dyIsImV4cCI6MTY5NzExNjYyMSwiaWF0IjoxNjk3MTE0ODIxLCJhZ2UiOjE4LCJqdGkiOiI2NGUxZGYzMzRmYjI0ZjJkOWQ4MGVkMGUwYjBiYThiNSIsInVzZXJuYW1lIjoienNzIn0.2QpKTmydrVHjUfwTHP-iewiKcszEx6PlIJp4k5EDJNU;//String newJwt eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MDU3NTM2NTUsImlhdCI6MTYwNTc1MTg1NSwiYWdlIjoxOCwianRpIjoiYmNmN2Q1MzQ2YjE3NGU2MDk1MmIxYzQ3ZTlmMzQyZjgiLCJ1c2VybmFtZSI6InpzcyJ9.m1Qn84RxgbKCnsvrdbbAnj8l_5Jwovry8En0j4kCxhc;//String oldJwt eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NjI5MDMzNjAsImlhdCI6MTU2MjkwMTU2MCwiYWdlIjoxOCwianRpIjoiZDVjMzE4Njg0MDcyNDgyZDg1MDE5ODVmMDY3OGQ4NjkiLCJ1c2VybmFtZSI6InpzcyJ9.XDDDRRq5jYq5EdEBHtPm7GcuBz4S0VhDTS1amRCdf48;String newJwt JwtUtils.copyJwt(oldJwt, JwtUtils.JWT_WEB_TTL);System.out.println(newJwt);Claims parseJwt JwtUtils.parseJwt(newJwt);for (Map.EntryString, Object entry : parseJwt.entrySet()) {System.out.println(entry.getKey() entry.getValue());}Date d1 parseJwt.getIssuedAt();Date d2 parseJwt.getExpiration();System.out.println(令牌签发时间 sdf.format(d1));System.out.println(令牌过期时间 sdf.format(d2));} 用于复制JWT并延时30分钟。在该方法中使用JwtUtils.copyJwt()方法复制了一个旧的JWT并设置了新的过期时间并将复制后的JWT打印输出。 2.4 测试JWT的有效时间 Testpublic void test4() {// 测试JWT的有效时间MapString, Object claims new HashMapString, Object();claims.put(username, zss);String jwt JwtUtils.createJwt(claims, 3 * 1000L);System.out.println(jwt);Claims parseJwt JwtUtils.parseJwt(jwt);Date d1 parseJwt.getIssuedAt();Date d2 parseJwt.getExpiration();System.out.println(令牌签发时间 sdf.format(d1));System.out.println(令牌过期时间 sdf.format(d2));} 2.5 模拟过期JWT的解析 Testpublic void test5() {// 三秒后再解析上面过期时间只有三秒的令牌因为过期则会报错io.jsonwebtoken.ExpiredJwtExceptionString oldJwt eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NjI4NTMzMzAsImlhdCI6MTU2Mjg1MzMyNywidXNlcm5hbWUiOiJ6c3MifQ.e098Vj9KBlZfC12QSDhI5lUGRLbNwb27lrYYSL6JwrQ;Claims parseJwt JwtUtils.parseJwt(oldJwt);// 过期后解析就报错了下面代码根本不会执行Date d1 parseJwt.getIssuedAt();Date d2 parseJwt.getExpiration();System.out.println(令牌签发时间 sdf.format(d1));System.out.println(令牌过期时间 sdf.format(d2));} 模拟JWT的解析时。如果出现这样的错误原因是尝试解析一个过期的JWT并会抛出io.jsonwebtoken.ExpiredJwtException异常。 三、JWT前后端分离在项目中的应用 没使用JWT之前只要我们前端页面只要登陆过一次将请求路径复制就可以再次打开这种行为是非常不安全的所以需要借助JWT进行认证方可进行访问下面就结合JWT来演示。 1、首先在过滤器里面加入允许JWT的跨域请求  package com.ycxw.ssm.jwt;import java.io.IOException;import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;/*** 配置tomcat允许跨域访问* * author Administrator**/ public class CorsFilter implements Filter {Overridepublic void init(FilterConfig filterConfig) throws ServletException {}// Override// public void doFilter(ServletRequest servletRequest, ServletResponse// servletResponse, FilterChain filterChain)// throws IOException, ServletException {// HttpServletResponse httpResponse (HttpServletResponse) servletResponse;//// // Access-Control-Allow-Origin就是我们需要设置的域名// // Access-Control-Allow-Headers跨域允许包含的头。// // Access-Control-Allow-Methods是允许的请求方式// httpResponse.addHeader(Access-Control-Allow-Origin, *);// *,任何域名// httpResponse.setHeader(Access-Control-Allow-Methods, POST, GET, PUT,// DELETE);// // httpResponse.setHeader(Access-Control-Allow-Headers, Origin,// // X-Requested-With, Content-Type, Accept);//// // 允许请求头Token// httpResponse.setHeader(Access-Control-Allow-Headers,// Origin,X-Requested-With, Content-Type, Accept, Token);// HttpServletRequest req (HttpServletRequest) servletRequest;// System.out.println(Token req.getHeader(Token));// if(OPTIONS.equals(req.getMethod())) {// return;// }////// filterChain.doFilter(servletRequest, servletResponse);// }Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)throws IOException, ServletException {HttpServletResponse resp (HttpServletResponse) servletResponse;HttpServletRequest req (HttpServletRequest) servletRequest;// Access-Control-Allow-Origin就是我们需要设置的域名// Access-Control-Allow-Headers跨域允许包含的头。// Access-Control-Allow-Methods是允许的请求方式resp.setHeader(Access-Control-Allow-Origin, *);// *,任何域名resp.setHeader(Access-Control-Allow-Methods, POST, GET, PUT, DELETE);// resp.setHeader(Access-Control-Allow-Headers, Origin,X-Requested-With,// Content-Type, Accept);// 允许客户端发一个新的请求头jwtresp.setHeader(Access-Control-Allow-Headers, Origin,X-Requested-With, Content-Type, Accept, jwt);// 允许客户端处理一个新的响应头jwtresp.setHeader(Access-Control-Expose-Headers, jwt);// String sss resp.getHeader(Access-Control-Expose-Headers);// System.out.println(sss sss);// 允许请求头Token// httpResponse.setHeader(Access-Control-Allow-Headers,Origin,X-Requested-With,// Content-Type, Accept, Token);// System.out.println(Token req.getHeader(Token));if (OPTIONS.equals(req.getMethod())) {// axios的ajax会发两次请求第一次提交方式为option直接返回即可return;}filterChain.doFilter(servletRequest, servletResponse);}Overridepublic void destroy() {} } 2、在web.xml进行配置过滤器 !--CrosFilter跨域过滤器--filterfilter-namecorsFilter/filter-namefilter-classcom.ycxw.ssm.util.CorsFilter2/filter-class/filterfilter-mappingfilter-namecorsFilter/filter-nameurl-pattern/*/url-pattern/filter-mapping 3、对登录请求进行过滤获取用户信息 package com.ycxw.ssm.jwt;import java.io.IOException; import java.util.regex.Matcher; import java.util.regex.Pattern;import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import io.jsonwebtoken.Claims;/*** * JWT验证过滤器配置顺序 CorsFilter--JwtFilter--struts2中央控制器* * author Administrator**/public class JwtFilter implements Filter {// 排除的URL一般为登陆的URL(请改成自己登陆的URL)private static String EXCLUDE ^/user/userLogin?.*$;private static Pattern PATTERN Pattern.compile(EXCLUDE);private boolean OFF false;// true关闭jwt令牌验证功能Overridepublic void init(FilterConfig filterConfig) throws ServletException {}Overridepublic void destroy() {}Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {HttpServletRequest req (HttpServletRequest) request;HttpServletResponse resp (HttpServletResponse) response;//获取当前请求路径。只有登录的请求路径不进行校验之外其他的URL请求路径必须进行JWT令牌校验//http://localhost:8080/ssh2/bookAction_queryBookPager.action//req.getServletPath()/bookAction_queryBookPager.actionString path req.getServletPath();if (OFF || isExcludeUrl(path)) {// 登陆直接放行chain.doFilter(request, response);return;}// 从客户端请求头中获得令牌并验证//token头.载荷.签名String jwt req.getHeader(JwtUtils.JWT_HEADER_KEY);Claims claims this.validateJwtToken(jwt);//在这里请各位大哥大姐从JWT令牌中提取payload中的声明部分//从声明部分中获取私有声明//获取私有声明中的User对象 - ModulesBoolean flagfalse;if (null claims) {// resp.setCharacterEncoding(UTF-8);resp.sendError(403, JWT令牌已过期或已失效);return;} else {//1.获取已经解析后的payload私有声明//2.从私有声明中当前用户所对应的权限集合ListString或者ListModule//3.循环权限(Module[id,url])// OK,放行请求 chain.doFilter(request, response);// NO,发送错误信息的JSON// ObjectMapper mappernew ObjectMapper()// mapper.writeValue(response.getOutputStream(),json)String newJwt JwtUtils.copyJwt(jwt, JwtUtils.JWT_WEB_TTL);resp.setHeader(JwtUtils.JWT_HEADER_KEY, newJwt);chain.doFilter(request, response);}}/*** 验证jwt令牌验证通过返回声明(包括公有和私有)返回null则表示验证失败*/private Claims validateJwtToken(String jwt) {Claims claims null;try {if (null ! jwt) {//该解析方法会验证1是否过期 2签名是否成功claims JwtUtils.parseJwt(jwt);}} catch (Exception e) {e.printStackTrace();}return claims;}/*** 是否为排除的URL* * param path* return*/private boolean isExcludeUrl(String path) {Matcher matcher PATTERN.matcher(path);return matcher.matches();}// public static void main(String[] args) {// String path /sys/userAction_doLogin.action?usernamezspassword123;// Matcher matcher PATTERN.matcher(path);// boolean b matcher.matches();// System.out.println(b);// }}注意这里有一个属性 private boolean OFF false; 我们在开发过程中可以通过这个属性来决定我们要不要使用JWT如果我们开发过程都需要JWT的话测试是非常麻烦的。 4、在Controller层编写保存JWT的方法  public JsonResponseBody? userLogin(UserVo userVo, HttpServletResponse response){if(userVo.getUsername().equals(ycxw)userVo.getPassword().equals(123)){//私有要求claimMapString,Object jsonnew HashMapString,Object();json.put(username, userVo.getUsername()); // 生成JWT并设置到response响应头中String jwtJwtUtils.createJwt(json, JwtUtils.JWT_WEB_TTL);response.setHeader(JwtUtils.JWT_HEADER_KEY, jwt);return new JsonResponseBody(用户登陆成功,true,0,null);}else{return new JsonResponseBody(用户名或密码错误,false,0,null);}} 前端编写 1、先在state.js定义jwt变量 export default {jwt: };再去mutations.js编写设置jwt的方法 export default {setJwt: (state, payload) {state.jwt payload.jwt;} };  2、在getters.js编写获取jwt的方法 export default {getJwt: (state) {return state.jwt} }; 3、在vue项目对axios的全局配置的请求过滤和响应过滤获取和设置JWT // 请求拦截器 axios.interceptors.request.use(function(config) {let jwt window.vm.$store.getters.getJwt;if(jwt){config.headers[jwt]jwt;}return config; }, function(error) {return Promise.reject(error); });// 响应拦截器 axios.interceptors.response.use(function(response) {let jwtresponse.headers[jwt];if(jwt){window.vm.$store.commit(setJwt,{jwt:jwt})}return response; }, function(error) {return Promise.reject(error); }); 登录过后请求主页会将开始后端响应的JWT保存到Vuex,下次发送请求的使用就会带上这个JWT后端校验如果不是登录请求又没有JWT又不会“放行请求” 登录请求 复制相同链接重新加载页面将不会出现数据库左侧列表信息。
文章转载自:
http://www.morning.addai.cn.gov.cn.addai.cn
http://www.morning.twgzq.cn.gov.cn.twgzq.cn
http://www.morning.zylrk.cn.gov.cn.zylrk.cn
http://www.morning.xbyyd.cn.gov.cn.xbyyd.cn
http://www.morning.fzlk.cn.gov.cn.fzlk.cn
http://www.morning.hrpbq.cn.gov.cn.hrpbq.cn
http://www.morning.cbnlg.cn.gov.cn.cbnlg.cn
http://www.morning.hwcln.cn.gov.cn.hwcln.cn
http://www.morning.sfrw.cn.gov.cn.sfrw.cn
http://www.morning.paoers.com.gov.cn.paoers.com
http://www.morning.qjbxt.cn.gov.cn.qjbxt.cn
http://www.morning.tqwcm.cn.gov.cn.tqwcm.cn
http://www.morning.wsxly.cn.gov.cn.wsxly.cn
http://www.morning.mphfn.cn.gov.cn.mphfn.cn
http://www.morning.zmpsl.cn.gov.cn.zmpsl.cn
http://www.morning.qgjgsds.com.cn.gov.cn.qgjgsds.com.cn
http://www.morning.fkcjs.cn.gov.cn.fkcjs.cn
http://www.morning.bfrff.cn.gov.cn.bfrff.cn
http://www.morning.wqfzx.cn.gov.cn.wqfzx.cn
http://www.morning.jcxzq.cn.gov.cn.jcxzq.cn
http://www.morning.xnpml.cn.gov.cn.xnpml.cn
http://www.morning.hmjasw.com.gov.cn.hmjasw.com
http://www.morning.xqqcq.cn.gov.cn.xqqcq.cn
http://www.morning.sgfgz.cn.gov.cn.sgfgz.cn
http://www.morning.wdskl.cn.gov.cn.wdskl.cn
http://www.morning.btrfm.cn.gov.cn.btrfm.cn
http://www.morning.rjznm.cn.gov.cn.rjznm.cn
http://www.morning.srbfp.cn.gov.cn.srbfp.cn
http://www.morning.lcxdm.cn.gov.cn.lcxdm.cn
http://www.morning.bkcnq.cn.gov.cn.bkcnq.cn
http://www.morning.ltkzb.cn.gov.cn.ltkzb.cn
http://www.morning.lmyq.cn.gov.cn.lmyq.cn
http://www.morning.cnqwn.cn.gov.cn.cnqwn.cn
http://www.morning.qcwrm.cn.gov.cn.qcwrm.cn
http://www.morning.llfwg.cn.gov.cn.llfwg.cn
http://www.morning.qkgwx.cn.gov.cn.qkgwx.cn
http://www.morning.nrgdc.cn.gov.cn.nrgdc.cn
http://www.morning.rxgnn.cn.gov.cn.rxgnn.cn
http://www.morning.jntdf.cn.gov.cn.jntdf.cn
http://www.morning.rfbpq.cn.gov.cn.rfbpq.cn
http://www.morning.gwqkk.cn.gov.cn.gwqkk.cn
http://www.morning.rjmd.cn.gov.cn.rjmd.cn
http://www.morning.mwns.cn.gov.cn.mwns.cn
http://www.morning.ryfqj.cn.gov.cn.ryfqj.cn
http://www.morning.xzlp.cn.gov.cn.xzlp.cn
http://www.morning.qcnk.cn.gov.cn.qcnk.cn
http://www.morning.hsgxj.cn.gov.cn.hsgxj.cn
http://www.morning.hylbz.cn.gov.cn.hylbz.cn
http://www.morning.kntsd.cn.gov.cn.kntsd.cn
http://www.morning.dtcsp.cn.gov.cn.dtcsp.cn
http://www.morning.xlclj.cn.gov.cn.xlclj.cn
http://www.morning.wfwqr.cn.gov.cn.wfwqr.cn
http://www.morning.fxzw.cn.gov.cn.fxzw.cn
http://www.morning.pffqh.cn.gov.cn.pffqh.cn
http://www.morning.jhrlk.cn.gov.cn.jhrlk.cn
http://www.morning.horihe.com.gov.cn.horihe.com
http://www.morning.bhrbr.cn.gov.cn.bhrbr.cn
http://www.morning.tfsyk.cn.gov.cn.tfsyk.cn
http://www.morning.lwmzp.cn.gov.cn.lwmzp.cn
http://www.morning.simpliq.cn.gov.cn.simpliq.cn
http://www.morning.xnbd.cn.gov.cn.xnbd.cn
http://www.morning.yhrfg.cn.gov.cn.yhrfg.cn
http://www.morning.yznsx.cn.gov.cn.yznsx.cn
http://www.morning.rsxw.cn.gov.cn.rsxw.cn
http://www.morning.dnmgr.cn.gov.cn.dnmgr.cn
http://www.morning.tpwrm.cn.gov.cn.tpwrm.cn
http://www.morning.tkryt.cn.gov.cn.tkryt.cn
http://www.morning.jtrqn.cn.gov.cn.jtrqn.cn
http://www.morning.wnjwb.cn.gov.cn.wnjwb.cn
http://www.morning.mqbzk.cn.gov.cn.mqbzk.cn
http://www.morning.mydgr.cn.gov.cn.mydgr.cn
http://www.morning.pngfx.cn.gov.cn.pngfx.cn
http://www.morning.rxwnc.cn.gov.cn.rxwnc.cn
http://www.morning.gklxm.cn.gov.cn.gklxm.cn
http://www.morning.ltkzb.cn.gov.cn.ltkzb.cn
http://www.morning.dgfpp.cn.gov.cn.dgfpp.cn
http://www.morning.rfbt.cn.gov.cn.rfbt.cn
http://www.morning.qzfjl.cn.gov.cn.qzfjl.cn
http://www.morning.yjknk.cn.gov.cn.yjknk.cn
http://www.morning.jhswp.cn.gov.cn.jhswp.cn
http://www.tj-hxxt.cn/news/277619.html

相关文章:

  • 建设游戏网站目的及其定位wordpress VIP系统
  • 大连模版网站一个一起做网站
  • 郑州pc网站建设南宁本地网站有哪些?
  • 济南网站建设哪家公司好2345网址导航设为主页
  • php 网站开发的来源本溪网站建设
  • 微信网站建设费记什么科目在线seo诊断
  • django网站开发源代码室内设计公司网站设计
  • 莱芜住房和城乡建设厅网站qq空间网站
  • 网站设计师薪资网站app的区别是什么
  • 网站建设页面大小做网站设计电脑买什么高端本好
  • 网站营销策略个人网站要有什么
  • 网站建设企业网站优化北京seo课程培训
  • 男女做暖暖到网站外贸网站建设浩森宇特
  • 手机网站用什么开发好自助建手机网站免费
  • 上海 网站制作公司哪家装修公司比较好的
  • 网站的搭建需要多少钱建网站石家庄
  • 咨询类网站建设wordpress实例教程
  • 罗源福州网站建设crm与scrm
  • 精美手机网站模板焦作网站开发公司
  • 中国建设部网站首页商丘网站推广公司
  • h5网站模板开发商洛市城乡建设规划局网站
  • 找别人做网站怎么防止别人修改织梦搭建网站教程
  • 经典企业网站模板云南网站做的好的公司
  • 流量统计是可以查询到网站来路的关键字里出现了不相关的关键词免费快递网站源码
  • 即时通讯型网站开发广州手表网站
  • 重庆网站建设公司建站模板昆明建设厅网站
  • 沈阳建网站xampp 搭建 wordpress
  • 迁安网站建设公司在线设计网站可以做ps和ppt
  • 佛山新网站制作咨询wordpress转换app
  • 怎样创建网站域名平台网站解析错误