标签:web 在服务器 ken login center 创建 oca 服务 enc
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
标头通常由两部分组成:令牌的类型和所使用的的签名算法,例如HMAC SHA256或RSA。它会使用base64编码组成JWT结构的第一部分
注意:base64是一种编码,也就是说,它是可以被翻译会原来的样子的,它并不是一种加密过程。
{ "alg" : "HS256", "typ" : "JWT" }
{ "sub" : "123456789", "name" : "Eric Fang", "admin" : true }
HMACSHA256(base64UrlEncode(header)+"."+base64UrlEncode(payload).secret)
最后一步签名的过程,实际上是对头部以及负载内容进行签名,防止内容被纂改,如果有人对头部以及负载的内容解码之后进行修改,再进行编码,最后加上之前的签名组合形成新的JWT的话,那么服务器端会判断出新的头部和负载形成的签名和JWT附带上的签名是不一样的,如果要对新的头部和负载进行签名,在不知道服务器加密时用的密钥的话,得出来的签名也是不一样的。
<!--jwt--> <dependency> <groupId>com.auth0</groupId> <artifactId>java-jwt</artifactId> <version>3.4.0</version> </dependency>
public class JwtUtils { //常量 public static final long EXPIRE = 1000 * 60 * 60 * 24; //token过期时间 public static final String APP_SECRET = "ukc8BDbRigUDaY6pZFfWus2jZWLPHO"; //秘钥 //生成token字符串的方法 public static String getJwtToken(String id, String nickname){ String JwtToken = Jwts.builder() .setHeaderParam("typ", "JWT") .setHeaderParam("alg", "HS256") .setSubject("guli-user") .setIssuedAt(new Date()) .setExpiration(new Date(System.currentTimeMillis() + EXPIRE)) .claim("id", id) //设置token主体部分 ,存储用户信息 .claim("nickname", nickname) .signWith(SignatureAlgorithm.HS256, APP_SECRET) .compact(); return JwtToken; } /** * 判断token是否存在与有效 * @param jwtToken * @return */ public static boolean checkToken(String jwtToken) { if(StringUtils.isEmpty(jwtToken)) return false; try { Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(jwtToken); } catch (Exception e) { e.printStackTrace(); return false; } return true; } /** * 判断token是否存在与有效 * @param request * @return */ public static boolean checkToken(HttpServletRequest request) { try { String jwtToken = request.getHeader("token"); if(StringUtils.isEmpty(jwtToken)) return false; Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(jwtToken); } catch (Exception e) { e.printStackTrace(); return false; } return true; } /** * 根据token字符串获取会员id * @param request * @return */ public static String getMemberIdByJwtToken(HttpServletRequest request) { String jwtToken = request.getHeader("token"); if(StringUtils.isEmpty(jwtToken)) return ""; Jws<Claims> claimsJws = Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(jwtToken); Claims claims = claimsJws.getBody(); return (String)claims.get("id"); } }
然后通过调用jwt工具类的方法就可以实现生成token
前端代码
submitLogin(){ //第一步,调用接口返回token字符串; login(this.user).then(response => { if(response.data.success){ //第二步,把token存在cookie中、也可以放在localStorage中(参数的意义:cookie名称,token,作用范围) cookie.set(‘edu_token‘, response.data.data.token, { domain: ‘localhost‘ }) //第四步,调用接口根据token获取用户信息 getLoginUserInfo().then(response => { this.loginInfo = response.data.data.item //将用户信息记录cookie cookie.set(‘edu_ucenter‘, this.loginInfo, { domain: ‘localhost‘ }) //跳转页面 window.location.href = "/"; }) } }) },
前端拦截器
拦截器写在request.js里面
// http request 拦截器 service.interceptors.request.use( config => { //debugger if (cookie.get(‘edu_token‘)) { //把获取的值放到header里面 config.headers[‘token‘] = cookie.get(‘edu_token‘); } return config }, err => { return Promise.reject(err); })
跳转页面获取用户信息
//创建方法,获取cookie对象 showInfo() { //从cookie获取用户信息 var userStr = cookie.get(‘edu_ucenter‘) if (userStr) { this.loginInfo = JSON.parse(userStr) } }
标签:web 在服务器 ken login center 创建 oca 服务 enc
原文地址:https://www.cnblogs.com/fqh2020/p/14769035.html