| | |
| | | package com.zy.asrs.wms.utils; |
| | | |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.zy.asrs.framework.common.Cools; |
| | | import com.zy.asrs.wms.common.constant.Constants; |
| | | import com.zy.asrs.wms.common.security.JwtSubject; |
| | | import io.jsonwebtoken.Claims; |
| | | import io.jsonwebtoken.Jwts; |
| | | import io.jsonwebtoken.SignatureAlgorithm; |
| | | import io.jsonwebtoken.io.Decoders; |
| | | import io.jsonwebtoken.io.Encoders; |
| | | import io.jsonwebtoken.security.Keys; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import java.security.Key; |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * JWT工具类 |
| | | * |
| | | * @author vincent |
| | | * @since 2018-01-21 16:30:59 |
| | | */ |
| | | public class JwtUtil { |
| | | |
| | | /** |
| | | * 获取请求中的access_token |
| | | * |
| | | * @param request HttpServletRequest |
| | | * @return String |
| | | */ |
| | | public static String getAccessToken(HttpServletRequest request) { |
| | | String access_token = request.getHeader(Constants.TOKEN_HEADER_NAME); |
| | | if (!Cools.isEmpty(access_token)) { |
| | | if (access_token.startsWith(Constants.TOKEN_TYPE)) { |
| | | access_token = Utils.removePrefix(access_token, Constants.TOKEN_TYPE).trim(); |
| | | } |
| | | } else { |
| | | access_token = request.getParameter(Constants.TOKEN_PARAM_NAME); |
| | | } |
| | | return access_token; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 生成token |
| | | * |
| | | * @param subject 载体 |
| | | * @param expire 过期时间 |
| | | * @param base64EncodedKey base64编码的Key |
| | | * @return token |
| | | */ |
| | | public static String buildToken(JwtSubject subject, Long expire, String base64EncodedKey) { |
| | | return buildToken(JSON.toJSONString(subject), expire, decodeKey(base64EncodedKey)); |
| | | } |
| | | |
| | | /** |
| | | * 生成token |
| | | * |
| | | * @param subject 载体 |
| | | * @param expire 过期时间 |
| | | * @param key 密钥 |
| | | * @return token |
| | | */ |
| | | public static String buildToken(String subject, Long expire, Key key) { |
| | | Date expireDate = new Date(new Date().getTime() + 1000 * expire); |
| | | return Jwts.builder() |
| | | .setSubject(subject) |
| | | .setExpiration(expireDate) |
| | | .setIssuedAt(new Date()) |
| | | .signWith(key) |
| | | .compact(); |
| | | } |
| | | |
| | | /** |
| | | * 解析token |
| | | * |
| | | * @param token token |
| | | * @param base64EncodedKey base64编码的Key |
| | | * @return Claims |
| | | */ |
| | | public static Claims parseToken(String token, String base64EncodedKey) { |
| | | return parseToken(token, decodeKey(base64EncodedKey)); |
| | | } |
| | | |
| | | /** |
| | | * 解析token |
| | | * |
| | | * @param token token |
| | | * @param key 密钥 |
| | | * @return Claims |
| | | */ |
| | | public static Claims parseToken(String token, Key key) { |
| | | return Jwts.parserBuilder() |
| | | .setSigningKey(key) |
| | | .build() |
| | | .parseClaimsJws(token) |
| | | .getBody(); |
| | | } |
| | | |
| | | /** |
| | | * 获取JwtSubject |
| | | * |
| | | * @param claims Claims |
| | | * @return JwtSubject |
| | | */ |
| | | public static JwtSubject getJwtSubject(Claims claims) { |
| | | return JSON.parseObject(claims.getSubject(), JwtSubject.class); |
| | | } |
| | | |
| | | /** |
| | | * 生成Key |
| | | * |
| | | * @return Key |
| | | */ |
| | | public static Key randomKey() { |
| | | return Keys.secretKeyFor(SignatureAlgorithm.HS256); |
| | | } |
| | | |
| | | /** |
| | | * base64编码key |
| | | * |
| | | * @return String |
| | | */ |
| | | public static String encodeKey(Key key) { |
| | | return Encoders.BASE64.encode(key.getEncoded()); |
| | | } |
| | | |
| | | /** |
| | | * base64编码Key |
| | | * |
| | | * @param base64EncodedKey base64编码的key |
| | | * @return Key |
| | | */ |
| | | public static Key decodeKey(String base64EncodedKey) { |
| | | if (Cools.isEmpty(base64EncodedKey)) { |
| | | return null; |
| | | } |
| | | return Keys.hmacShaKeyFor(Decoders.BASE64.decode(base64EncodedKey)); |
| | | } |
| | | |
| | | } |
| | | package com.zy.asrs.wms.utils;
|
| | |
|
| | |
|
| | | import com.alibaba.fastjson.JSON;
|
| | | import com.zy.asrs.framework.common.Cools;
|
| | | import com.zy.asrs.wms.common.constant.Constants;
|
| | | import com.zy.asrs.wms.common.security.JwtSubject;
|
| | | import io.jsonwebtoken.Claims;
|
| | | import io.jsonwebtoken.Jwts;
|
| | | import io.jsonwebtoken.SignatureAlgorithm;
|
| | | import io.jsonwebtoken.io.Decoders;
|
| | | import io.jsonwebtoken.io.Encoders;
|
| | | import io.jsonwebtoken.security.Keys;
|
| | |
|
| | | import javax.servlet.http.HttpServletRequest;
|
| | | import java.security.Key;
|
| | | import java.util.Date;
|
| | |
|
| | | /**
|
| | | * JWT工具类
|
| | | *
|
| | | * @author vincent
|
| | | * @since 2018-01-21 16:30:59
|
| | | */
|
| | | public class JwtUtil {
|
| | |
|
| | | /**
|
| | | * 获取请求中的access_token
|
| | | *
|
| | | * @param request HttpServletRequest
|
| | | * @return String
|
| | | */
|
| | | public static String getAccessToken(HttpServletRequest request) {
|
| | | String access_token = request.getHeader(Constants.TOKEN_HEADER_NAME);
|
| | | if (!Cools.isEmpty(access_token)) {
|
| | | if (access_token.startsWith(Constants.TOKEN_TYPE)) {
|
| | | access_token = Utils.removePrefix(access_token, Constants.TOKEN_TYPE).trim();
|
| | | }
|
| | | } else {
|
| | | access_token = request.getParameter(Constants.TOKEN_PARAM_NAME);
|
| | | }
|
| | | return access_token;
|
| | | }
|
| | |
|
| | |
|
| | | /**
|
| | | * 生成token
|
| | | *
|
| | | * @param subject 载体
|
| | | * @param expire 过期时间
|
| | | * @param base64EncodedKey base64编码的Key
|
| | | * @return token
|
| | | */
|
| | | public static String buildToken(JwtSubject subject, Long expire, String base64EncodedKey) {
|
| | | return buildToken(JSON.toJSONString(subject), expire, decodeKey(base64EncodedKey));
|
| | | }
|
| | |
|
| | | /**
|
| | | * 生成token
|
| | | *
|
| | | * @param subject 载体
|
| | | * @param expire 过期时间
|
| | | * @param key 密钥
|
| | | * @return token
|
| | | */
|
| | | public static String buildToken(String subject, Long expire, Key key) {
|
| | | Date expireDate = new Date(new Date().getTime() + 1000 * expire);
|
| | | return Jwts.builder()
|
| | | .setSubject(subject)
|
| | | .setExpiration(expireDate)
|
| | | .setIssuedAt(new Date())
|
| | | .signWith(key)
|
| | | .compact();
|
| | | }
|
| | |
|
| | | /**
|
| | | * 解析token
|
| | | *
|
| | | * @param token token
|
| | | * @param base64EncodedKey base64编码的Key
|
| | | * @return Claims
|
| | | */
|
| | | public static Claims parseToken(String token, String base64EncodedKey) {
|
| | | return parseToken(token, decodeKey(base64EncodedKey));
|
| | | }
|
| | |
|
| | | /**
|
| | | * 解析token
|
| | | *
|
| | | * @param token token
|
| | | * @param key 密钥
|
| | | * @return Claims
|
| | | */
|
| | | public static Claims parseToken(String token, Key key) {
|
| | | return Jwts.parserBuilder()
|
| | | .setSigningKey(key)
|
| | | .build()
|
| | | .parseClaimsJws(token)
|
| | | .getBody();
|
| | | }
|
| | |
|
| | | /**
|
| | | * 获取JwtSubject
|
| | | *
|
| | | * @param claims Claims
|
| | | * @return JwtSubject
|
| | | */
|
| | | public static JwtSubject getJwtSubject(Claims claims) {
|
| | | return JSON.parseObject(claims.getSubject(), JwtSubject.class);
|
| | | }
|
| | |
|
| | | /**
|
| | | * 生成Key
|
| | | *
|
| | | * @return Key
|
| | | */
|
| | | public static Key randomKey() {
|
| | | return Keys.secretKeyFor(SignatureAlgorithm.HS256);
|
| | | }
|
| | |
|
| | | /**
|
| | | * base64编码key
|
| | | *
|
| | | * @return String
|
| | | */
|
| | | public static String encodeKey(Key key) {
|
| | | return Encoders.BASE64.encode(key.getEncoded());
|
| | | }
|
| | |
|
| | | /**
|
| | | * base64编码Key
|
| | | *
|
| | | * @param base64EncodedKey base64编码的key
|
| | | * @return Key
|
| | | */
|
| | | public static Key decodeKey(String base64EncodedKey) {
|
| | | if (Cools.isEmpty(base64EncodedKey)) {
|
| | | return null;
|
| | | }
|
| | | return Keys.hmacShaKeyFor(Decoders.BASE64.decode(base64EncodedKey));
|
| | | }
|
| | |
|
| | | }
|