/** * 加密 Token对象 如果加密后的加密串要用于 URL 进行传递,那么就必须 * * @param token * @return */ public String buildToken(OauthToken token) { StringBuffer sb = new StringBuffer(); String split = this.findSplit(StringUtils.join(new String[] {token.getUsername(), token.getPassword()})); sb.append(System.currentTimeMillis()) .append(split) .append(token.getUsername()) .append(split) .append(token.getPassword()); return desEncrypt.encrypt(sb.toString(), ENCRYPT_KEY); }
/** * 根据 token 串解密出 OauthToken 对象 * * @param token * @return */ public OauthToken parseToken(String token) { String deToken = desEncrypt.decrypt(token, ENCRYPT_KEY); if (deToken == null) return null; String[] tokens = this.findSplitsToken(deToken); if (tokens != null && tokens.length == 3) { OauthToken oauthToken = new OauthToken(); oauthToken.setUsername(tokens[1]); oauthToken.setPassword(tokens[2]); try { // token时间限制,半小时 long time = Long.parseLong(tokens[0]); if ((System.currentTimeMillis() - time) > 1800000) { logger.error("令牌已超时"); return null; } } catch (NumberFormatException e) { return null; } return oauthToken; } else { logger.error("令牌已超时"); } return null; }