123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- package com.fuint.common.util;
- import com.fasterxml.jackson.databind.ObjectMapper;
- import com.fuint.common.Constants;
- import com.fuint.common.dto.AccountInfo;
- import com.fuint.common.dto.UserInfo;
- import com.fuint.utils.StringUtil;
- import nl.bitwalker.useragentutils.UserAgent;
- import org.springframework.stereotype.Component;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import java.util.Random;
- /**
- * 登录Token服务接口
- *
- * Created by FSQ
- * CopyRight https://www.fuint.cn
- */
- @Component
- public class TokenUtil {
- public static int TOKEN_OVER_TIME = 604800;
- /**
- * 生成token
- *
- * @param userAgent
- * @param userId
- * @return
- * */
- public static String generateToken(String userAgent, Integer userId) {
- StringBuilder token = new StringBuilder();
- UserAgent userAgent1 = UserAgent.parseUserAgentString(userAgent);
- if (userAgent1.getOperatingSystem().isMobileDevice()) {
- token.append("APP_");
- } else {
- token.append("PC_");
- }
- token.append(userId);
- token.append(new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()) + "_");
- token.append(new Random().nextInt((999999 - 111111 + 1)) + 111111);
- String tokenStr = MD5Util.getMD5(token.toString()).replace("+", "1").replaceAll("&", "8");
- UserInfo userLoginInfo = new UserInfo();
- userLoginInfo.setId(userId);
- userLoginInfo.setToken(tokenStr);
- saveToken(userLoginInfo);
- return tokenStr;
- }
- /**
- * 保存token
- *
- * @param userInfo
- * @return
- * */
- public static void saveToken(UserInfo userInfo) {
- if (userInfo == null || userInfo.getToken() == null) {
- return;
- }
- RedisUtil.set(Constants.SESSION_USER + userInfo.getToken(), userInfo, TOKEN_OVER_TIME);
- }
- /**
- * 通过token获取后台登录信息
- *
- * @param token
- * @return
- * */
- public static UserInfo getUserInfoByToken(String token) {
- if (token == null || StringUtil.isEmpty(token)) {
- return null;
- }
- Object loginInfo = RedisUtil.get(Constants.SESSION_USER + token);
- ObjectMapper objectMapper = new ObjectMapper();
- UserInfo userInfo = objectMapper.convertValue(loginInfo, UserInfo.class);
- if (userInfo != null && userInfo.getToken().equals(token)) {
- return userInfo;
- }
- return null;
- }
- /**
- * 检查是否登录
- *
- * @param token
- * @return
- * */
- public static boolean checkTokenLogin(String token) {
- UserInfo userInfo = RedisUtil.get(Constants.SESSION_USER + token);
- if (userInfo != null && userInfo.getToken().equals(token)) {
- return true;
- }
- return false;
- }
- /**
- * 删除登录信息
- *
- * @param token
- * @return
- * */
- public static boolean removeToken(String token) {
- RedisUtil.remove(token);
- AuthUserUtil.clean();
- return true;
- }
- /**
- * 保存后台登录token
- *
- * @param accountInfo
- * @return
- * */
- public static void saveAccountToken(AccountInfo accountInfo) {
- if (accountInfo == null) {
- return;
- }
- RedisUtil.set(Constants.SESSION_ADMIN_USER + accountInfo.getToken(), accountInfo, TOKEN_OVER_TIME);
- }
- /**
- * 通过登录token获取后台登录信息
- *
- * @param token
- * @return
- * */
- public static AccountInfo getAccountInfoByToken(String token) {
- Object loginInfo = RedisUtil.get(Constants.SESSION_ADMIN_USER + token);
- ObjectMapper objectMapper = new ObjectMapper();
- AccountInfo accountInfo = objectMapper.convertValue(loginInfo, AccountInfo.class);
- if (accountInfo != null && accountInfo.getToken().equals(token)) {
- return accountInfo;
- }
- return null;
- }
- }
|