建设部职称网站,闲鱼钓鱼链接,做微商如何引流推广怎么找客源,网站建设推广营销策划jwt详细介绍 1.jwt 简介#xff1a;2.jwt 工具类介绍3.案列演示#xff1a;3.1并在web.xml进行配置过滤器 3.2过滤3.3全局响应设置 1.jwt 简介#xff1a;
。JWT#xff08;JSON Web Token#xff09; 是一种用于安全传输信息的开放标准#xff08;RFC 7519#xff09;… jwt详细介绍 1.jwt 简介2.jwt 工具类介绍3.案列演示3.1并在web.xml进行配置过滤器 3.2过滤3.3全局响应设置 1.jwt 简介
。JWTJSON Web Token 是一种用于安全传输信息的开放标准RFC 7519。它由三部分组成头部header、负载payload和签名signature。
头部包含了关于该JWT的元数据如使用的加密算法类型等。负载存储了需要传输的数据比如用户的身份信息、权限等。签名是由头部、负载和一个密钥生成的用于验证JWT是否被篡改。
JWT的工作流程如下
用户登录时服务器验证用户的身份并生成一个JWT。 服务器将JWT发送给客户端并保存在客户端的存储介质中通常是浏览器的Cookie或本地存储。 客户端在后续的请求中将JWT通过HTTP头部或请求参数的方式发送给服务器。 服务器接收到JWT后会对其进行验证包括验证签名的有效性、判断JWT是否过期等。 如果JWT验证通过服务器可以使用其中的数据来完成相应的操作比如认证用户身份、授权等。 JWT的优点包括
简洁JWT使用JSON格式存储数据使得它更易读、编写和解析。 自包含JWT中包含了所有必要的信息减少了服务器查询数据库的次数。 可扩展JWT的负载部分可以自定义可以根据需要添加额外的字段。 安全性通过使用签名和密钥JWT可以验证数据的完整性和源信任。 然而需要注意的是由于JWT是基于客户端存储的因此在使用时需要考虑到安全性问题比如防止JWT被篡改、泄露等。
2.jwt 工具类介绍
package com.zking.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();}
}
这段代码是一个用于生成和解析JWTJSON Web Token的工具类。JWT是一种用于安全传输信息的开放标准通过使用签名和密钥来验证数据的完整性和源信任。
该工具类包括以下功能
解密JWT根据传入的JWT字符串使用密钥对其进行解密获取其中的所有声明包括标准和私有声明。
创建JWT令牌根据传入的私有声明、有效时间等参数生成一个新的JWT令牌并返回该令牌。
复制JWT根据传入的JWT字符串和有效时间复制并重新设置JWT的签发时间和失效时间并返回新的JWT字符串。
在构建JWT时该工具类使用了Apache Commons Codec库中的Base64类进行编码和解码操作。另外使用了io.jsonwebtoken库提供的JwtBuilder和Jwts类进行JWT的创建和解析操作。
需要注意的是JWT_SECRET是一个密钥字符串用于生成加密key并且应当保持安全JWT_WEB_TTL是JWT的有效时间默认为30分钟JWT_HEADER_KEY是将JWT令牌保存到HTTP头部中的键名。
此外在使用该工具类时需要按照一定的顺序配置过滤器以确保JWT验证的正确进行。
总体而言这个工具类提供了便捷的方法来生成和解析JWT令牌方便在WEB应用中进行身份验证和授权操作。 工具类测试
package com.zking.ssm.service.impl;import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;import com.zking.ssm.jwt.JwtUtils;
import io.jsonwebtoken.Claims;
import org.junit.*;public class JwtDemo {private SimpleDateFormat sdf new SimpleDateFormat(yyyy-MM-dd HH:mm:ss.SSS);Testpublic void test1() {// 生成JWT//JWT TokenHeader.Payload.Signature//头部.载荷.签名//Payload标准声明私有声明公有声明//定义私有声明MapString, Object claims new HashMapString, Object();claims.put(username, zss);claims.put(age, 18);//TTL:Time To LiveString jwt JwtUtils.createJwt(claims, JwtUtils.JWT_WEB_TTL);System.out.println(jwt);//获取Payload包含标准和私有声明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));}Testpublic void test2() {// 解析oldJwt//io.jsonwebtoken.ExpiredJwtExceptionJWT过期异常//io.jsonwebtoken.SignatureException签名异常//String oldJwteyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1OTA3MTg2NzcsImlhdCI6MTU5MDcxNjg3NywiYWdlIjoxOCwianRpIjoiNDFmZjFiZGFkYzkxNDA3OGE4ZGUyNGRkZDEwYjU4N2IiLCJ1c2VybmFtZSI6InpzcyJ9.DdPvioX6kuhV6lEfD9QAN2eQSk_mO3dYkmDmTQsqa78;//eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MzU1NjE3MjcsImlhdCI6MTYzNTU1OTkyNywiYWdlIjoxOCwianRpIjoiN2RlYmIzM2JiZTg3NDBmODgzNDI5Njk0ZWE4NzcyMTgiLCJ1c2VybmFtZSI6InpzcyJ9.dUR-9JUlyRdoYx-506SxXQ3gbHFCv0g5Zm8ZGzK1fzwString newJwteyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJ6a2luZyIsImV4cCI6MTY5NzIxMTkxNywiaWF0IjoxNjk3MjEwMTE3LCJhZ2UiOjE4LCJqdGkiOiJlMmM1MDViYTcyMDA0NjZjOGVjNzExMTc4NjBiM2QzYiIsInVzZXJuYW1lIjoienNzIn0.FUWLkxJD64JyT_PepC2sxlOc1TFHBOQc_Fx3xHoDn2Y;String oldJwt eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MzU1NjE3MjcsImlhdCI6MTYzNTU1OTkyNywiYWdlIjoxOCwianRpIjoiN2RlYmIzM2JiZTg3NDBmODgzNDI5Njk0ZWE4NzcyMTgiLCJ1c2VybmFtZSI6InpzcyJ9.dUR-9JUlyRdoYx-506SxXQ3gbHFCv0g5Zm8ZGzK1fzw;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));}Testpublic void test3() {// 复制jwt并延时30分钟String oldJwt eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJ6a2luZyIsImV4cCI6MTY5NzIxMTkxNywiaWF0IjoxNjk3MjEwMTE3LCJhZ2UiOjE4LCJqdGkiOiJlMmM1MDViYTcyMDA0NjZjOGVjNzExMTc4NjBiM2QzYiIsInVzZXJuYW1lIjoienNzIn0.FUWLkxJD64JyT_PepC2sxlOc1TFHBOQc_Fx3xHoDn2Y;//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));}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));}Testpublic void test5() {// 三秒后再解析上面过期时间只有三秒的令牌因为过期则会报错io.jsonwebtoken.ExpiredJwtException//String oldJwt eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MzU1NjMzODIsImlhdCI6MTYzNTU2MTU4MiwiYWdlIjoxOCwianRpIjoiN2RlYmIzM2JiZTg3NDBmODgzNDI5Njk0ZWE4NzcyMTgiLCJ1c2VybmFtZSI6InpzcyJ1.F4pZFCjWP6wlq8v_udfhOkNCpErF5QlL7DXJdzXTHqE;String oldJwt eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJ6a2luZyIsImV4cCI6MTY2MjM0Njg3MSwiaWF0IjoxNjYyMzQ1MDcxLCJhZ2UiOjE4LCJqdGkiOiI4YjllNzc3YzFlMDM0MjViYThmMDVjNTFlMTU3NDQ1MiIsInVzZXJuYW1lIjoienNzIn9.UWpJxPxwJ09PKxE2SY5ME41W1Kv3jP5bZGKK-oNUDuM;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的生成、解析和复制功能。
test1() 方法生成JWT
首先定义了一个包含私有声明的 Map 对象其中包括了用户的用户名和年龄信息。 然后调用 JwtUtils.createJwt() 方法生成JWT令牌并将令牌打印输出。 接着使用 JwtUtils.parseJwt() 方法解析JWT获取其中的声明信息并打印出来包括标准声明和私有声明。 最后打印出令牌的签发时间和过期时间。
test2() 方法解析JWT
将一个已经生成的 JWT 令牌传入 JwtUtils.parseJwt() 方法进行解析。 使用循环遍历的方式打印出解析后的所有声明信息包括标准声明和私有声明。 打印出令牌的签发时间和过期时间。 test3() 方法复制JWT并延时30分钟 将一个已经生成的 JWT 令牌传入 JwtUtils.copyJwt() 方法进行复制同时指定新的有效时间延时30分钟。 返回复制后的新的 JWT 令牌并打印出来。 使用 JwtUtils.parseJwt() 方法解析新的 JWT 令牌打印出所有声明信息并打印出令牌的签发时间和过期时间。
test4() 方法测试JWT的有效时间
定义一个只包含用户名信息的私有声明。 调用 JwtUtils.createJwt() 方法生成 JWT 令牌并指定有效时间为3秒。 打印出生成的 JWT 令牌。 使用 JwtUtils.parseJwt() 方法解析 JWT 令牌打印出令牌的签发时间和过期时间。
test5() 方法测试JWT过期
将一个已经过期的 JWT 令牌传入 JwtUtils.parseJwt() 方法进行解析。 由于令牌已经过期解析时会抛出 io.jsonwebtoken.ExpiredJwtException 异常不会执行后续代码 工具类测试结果。
3.案列演示
1.前面提到过JWT跨语言那就涉及到跨域问题首先在我们的过滤器里面加入允许JWT的跨域请求
package com.zking.ssm.util;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 {}Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)throws IOException, ServletException {HttpServletResponse httpResponse (HttpServletResponse) servletResponse;HttpServletRequest req (HttpServletRequest) servletRequest;// Access-Control-Allow-Origin就是我们需要设置的域名// Access-Control-Allow-Headers跨域允许包含的头。// Access-Control-Allow-Methods是允许的请求方式httpResponse.setHeader(Access-Control-Allow-Origin, *);// *,任何域名httpResponse.setHeader(Access-Control-Allow-Methods, POST, GET, PUT, DELETE);//允许客户端发一个新的请求头jwthttpResponse.setHeader(Access-Control-Allow-Headers,responseType,Origin,X-Requested-With, Content-Type, Accept, jwt);//允许客户端处理一个新的响应头jwthttpResponse.setHeader(Access-Control-Expose-Headers, jwt,Content-Disposition);//httpResponse.setHeader(Access-Control-Allow-Headers, Origin, X-Requested-With, Content-Type, Accept);//httpResponse.setHeader(Access-Control-Allow-Methods, POST, GET, PUT, DELETE);// axios的ajax会发两次请求第一次提交方式为option直接返回即可if (OPTIONS.equals(req.getMethod())) {return;}filterChain.doFilter(servletRequest, servletResponse);}Overridepublic void destroy() {}
}3.1并在web.xml进行配置过滤器
!--CrosFilter跨域过滤器--filterfilter-namecorsFilter/filter-namefilter-classcom.zking.ssm.util.CorsFilter/filter-class/filterfilter-mappingfilter-namecorsFilter/filter-nameurl-pattern/*/url-pattern/filter-mapping
3.2过滤
package com.zking.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);// }}state
export default{eduName:猪猪教育,jwt:
}getters
export default{geteduName:(state){return state.eduName;},getjwt:(state){return state.jwt;}
}mutation
export default{setName:(state,payload){state.eduNamepayload.eduName;},setJwt:(state,payload){state.jwtpayload.jwt;}
}3.3全局响应设置
/*** vue项目对axios的全局配置*/
import axios from axios
import qs from qs//引入action模块并添加至axios的类属性urls上
import action from /api/action
axios.urls action// axios默认配置
axios.defaults.timeout 10000; // 超时时间
// axios.defaults.baseURL http://localhost:8080/j2ee15; // 默认地址
axios.defaults.baseURL action.SERVER;//整理数据
// 只适用于 POST,PUT,PATCHtransformRequest 允许在向服务器发送前修改请求数据
axios.defaults.transformRequest function(data) {data qs.stringify(data);return data;
};// 请求拦截器
axios.interceptors.request.use(function(config) {var jwt window.vm.$store.getters.getjwt;config.headers[jwt] jwt;return config;
}, function(error) {return Promise.reject(error);
});// 响应拦截器
axios.interceptors.response.use(function(response) {// debugger;var jwt response.headers[jwt];if(jwt){window.vm.$store.commit(setJwt,{jwt:jwt});}return response;
}, function(error) {return Promise.reject(error);
});// // 路由请求拦截
// // http request 拦截器
// axios.interceptors.request.use(
// config {
// //config.data JSON.stringify(config.data);
// //config.headers[Content-Type] application/json;charsetUTF-8;
// //config.headers[Token] abcxyz;
// //判断是否存在ticket如果存在的话则每个http header都加上ticket
// // if (cookie.get(token)) {
// // //用户每次操作都将cookie设置成2小时
// // cookie.set(token, cookie.get(token), 1 / 12)
// // cookie.set(name, cookie.get(name), 1 / 12)
// // config.headers.token cookie.get(token);
// // config.headers.name cookie.get(name);
// // }
// return config;
// },
// error {
// return Promise.reject(error.response);
// });// // 路由响应拦截
// // http response 拦截器
// axios.interceptors.response.use(
// response {
// if (response.data.resultCode 404) {
// console.log(response.data.resultCode是404)
// // 返回 错误代码-1 清除ticket信息并跳转到登录页面
// // cookie.del(ticket)
// // window.location.hrefhttp://login.com
// return
// } else {
// return response;
// }
// },
// error {
// return Promise.reject(error.response) // 返回接口返回的错误信息
// });export default axios;