| | |
| | | package com.gkhy.assess.common.utils; |
| | | |
| | | import cn.hutool.core.date.DateUtil; |
| | | import cn.hutool.crypto.digest.DigestUtil; |
| | | import com.auth0.jwt.JWT; |
| | | import com.auth0.jwt.JWTVerifier; |
| | | import com.auth0.jwt.algorithms.Algorithm; |
| | | import com.auth0.jwt.exceptions.JWTDecodeException; |
| | | import com.auth0.jwt.interfaces.DecodedJWT; |
| | | import com.fasterxml.jackson.databind.ObjectMapper; |
| | | import com.gkhy.assess.common.api.CommonResult; |
| | | import com.gkhy.assess.common.exception.ApiException; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.apache.shiro.crypto.hash.Md5Hash; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | |
| | | import javax.servlet.ServletResponse; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.io.IOException; |
| | | import java.io.OutputStream; |
| | | import java.util.Date; |
| | | |
| | | /** |
| | |
| | | |
| | | public static String tokenHead=""; |
| | | |
| | | /**Token有效期为7天(Token在reids中缓存时间为两倍)*/ |
| | | public static final long EXPIRATION=(7 * 12) * 60 * 60 * 1000; //JWT的超期限时间(60*60*24*7) |
| | | /**Token有效期为1天(Token在reids中缓存时间为两倍) 单位ms*/ |
| | | public static final long EXPIRATION=(1 * 24) * 60 * 60 * 1000; //JWT的超期限时间(60*60*24*1) |
| | | |
| | | /** |
| | | * token有效期还有30分钟,刷新token 单位ms |
| | | */ |
| | | public static final long NEED_UPDATE_TIME= 30 * 60 * 1000; |
| | | |
| | | /** |
| | | * 校验token是否正确 |
| | |
| | | }catch (Exception e){ |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | |
| | | public static boolean isNeedUpdate(String token,String username,String secret){ |
| | | Date expertsAt =null; |
| | | try { |
| | | Algorithm algorithm = Algorithm.HMAC256(secret); |
| | | JWTVerifier verifier = JWT.require(algorithm).withClaim("username", username).build(); |
| | | expertsAt = verifier.verify(token).getExpiresAt(); |
| | | }catch (Exception e){ |
| | | throw new ApiException("token非法无效"); |
| | | } |
| | | //如果剩余过期时间少于过期时常的一半时 需要更新 |
| | | return (expertsAt.getTime()-System.currentTimeMillis()) < NEED_UPDATE_TIME; |
| | | } |
| | | |
| | | /** |
| | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * |
| | | * @param response |
| | | * @param code |
| | | * @param errorMsg |
| | | */ |
| | | public static void responseError(ServletResponse response, String errorMsg) { |
| | | HttpServletResponse httpServletResponse = (HttpServletResponse) response; |
| | | // issues/I4YH95浏览器显示乱码问题 |
| | | httpServletResponse.setHeader("Content-type", "text/html;charset=UTF-8"); |
| | | CommonResult jsonResult = CommonResult.failed(errorMsg); |
| | | OutputStream os = null; |
| | | try { |
| | | os = httpServletResponse.getOutputStream(); |
| | | httpServletResponse.setCharacterEncoding("UTF-8"); |
| | | // httpServletResponse.setStatus(code); |
| | | os.write(new ObjectMapper().writeValueAsString(jsonResult).getBytes("UTF-8")); |
| | | os.flush(); |
| | | os.close(); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | } |