token
1.token验证流程:
机制:验证;
客户端与服务器分离,客户端页面加载,首先须验证token。其时间周期内可不用重复验证token。(输入密码:获取token)
验证失败:1.token==null;2.时间周期过了→跳转到登录面。
2.使用token,首先得将token所需jar包依赖进来
<!--JWT_token认证--> <dependency> <groupId>com.auth0</groupId> <artifactId>java-jwt</artifactId> <version>3.2.0</version> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.7.0</version> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.7</version> </dependency>
3.定义操作类
public class TokenUtil { /**------------------------------------------------------------------------------------------------------- * TODO: createJWT-创建token * @param id 用户编号 * @param issuer 用户名/编码 * @param subject 用户角色、姓名或其它信息 * @param ttlMillis token时限 * @return java.lang.String 返回token -------------------------------------------------------------------------------------------------------*/ public static String createJWT(String id, String issuer, String subject, long ttlMillis) {//创建一个token SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;//加密算法 long nowMillis = System.currentTimeMillis();//当前系统的时间 Date now = new Date(nowMillis); byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary(com.lixuan.diploma.utils.jwt.SystemSignCfg.JWT_SECERT);//生成64位加密算法 Key signingKey = new SecretKeySpec(apiKeySecretBytes, signatureAlgorithm.getJcaName()); JwtBuilder builder = Jwts.builder().setId(id)//生成JwtBuilder .setIssuedAt(now) .setSubject(subject) .setIssuer(issuer) .signWith(signatureAlgorithm, signingKey); if (ttlMillis >= 0) {//续时间 long expMillis = nowMillis + com.lixuan.diploma.utils.jwt.SystemSignCfg.TTLMILLIS; Date exp = new Date(expMillis); builder.setExpiration(exp); } return builder.compact(); } /**------------------------------------------------------------------------------------------------------ * TODO:parseJWT-解析token * @param jwt token * @return io.jsonwebtoken.Claims 载荷 -------------------------------------------------------------------------------------------------------*/ public static Claims parseJWT(String jwt) { Claims claims = Jwts.parser() .setSigningKey(DatatypeConverter.parseBase64Binary(com.lixuan.diploma.utils.jwt.SystemSignCfg.JWT_SECERT)) .parseClaimsJws(jwt).getBody(); return claims; } /**------------------------------------------------------------------------------------------------------ * TODO:validateJWT-验证token * @param jwt token * @return com.gudh.academic.util.jwt.CheckResult -------------------------------------------------------------------------------------------------------*/ public static CheckResult validateJWT(String jwt) { CheckResult checkResult = new CheckResult(); Claims claims = null; try { claims = parseJWT(jwt); checkResult.setSuccess(true); checkResult.setClaims(claims); } catch (ExpiredJwtException e) {//超时异常:-1 checkResult.setErrCode(com.lixuan.diploma.utils.jwt.SystemSignCfg.JWT_ERRCODE_EXPIRE); checkResult.setSuccess(false); } catch (SignatureException e) {//签名异常-2 checkResult.setErrCode(com.lixuan.diploma.utils.jwt.SystemSignCfg.JWT_ERRCODE_FAIL); checkResult.setSuccess(false); } catch (Exception e) {//-2 checkResult.setErrCode(com.lixuan.diploma.utils.jwt.SystemSignCfg.JWT_ERRCODE_FAIL); checkResult.setSuccess(false); } return checkResult; } }
public class CheckResult { private boolean success;//是否成功 private int errCode;//验证失败后失败码是多少 private Claims claims;//载荷 public boolean isSuccess() { return success; } public void setSuccess(boolean success) { this.success = success; } public int getErrCode() { return errCode; } public void setErrCode(int errCode) { this.errCode = errCode; } public Claims getClaims() { return claims; } public void setClaims(Claims claims) { this.claims = claims; } }
public class SystemSignCfg{ public static final String JWT_SECERT="lixuan@123";//配置Tocken密钥(公共密码) public static final int JWT_ERRCODE_EXPIRE=-1; //时限过期标识 public static final int JWT_ERRCODE_FAIL=-2; //失败标识 public static final long TTLMILLIS=1000*60*300; //配置tocken超时时限制 1000毫秒:1s*60*300=300min }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)