集成微信登录双token

This commit is contained in:
sh
2026-05-11 18:55:20 +08:00
parent 7bed78c23a
commit bf79bc89d7
6 changed files with 102 additions and 6 deletions

View File

@@ -150,6 +150,27 @@ public class SysLoginController
return ajax; return ajax;
} }
/**
* 刷新token
* @param refreshToken
* @return
*/
@PostMapping("/refreshToken")
public AjaxResult refreshToken(String refreshToken)
{
if (StringUtils.isEmpty(refreshToken)) {
return AjaxResult.error("refresh_token不能为空");
}
if (!loginService.checkRefreshTokenValid(refreshToken)) {
return AjaxResult.error("登录已过期,请重新登录");
}
String newToken = loginService.createNewAccessToken(refreshToken);
AjaxResult ajax = AjaxResult.success();
ajax.put(Constants.TOKEN, newToken);
ajax.put(Constants.EXPIRES_IN, 7200);
return ajax;
}
/** /**
* 一体机身份证登录 * 一体机身份证登录
* @param loginBody * @param loginBody

View File

@@ -49,4 +49,9 @@ public class CacheConstants
*pc岗位ids *pc岗位ids
*/ */
public static final String SYS_JOB_IDS = "job_ids:"; public static final String SYS_JOB_IDS = "job_ids:";
/**
* 刷新token
*/
public static final String LOGIN_SITE_REFRESH_KEY = "login_site_user:refresh_token:";
} }

View File

@@ -100,6 +100,16 @@ public class Constants
*/ */
public static final String TOKEN = "token"; public static final String TOKEN = "token";
/**
* 超时时间
*/
public static final String EXPIRES_IN="expiresIn";
/**
* 刷新token
*/
public static final String REFRESH_TOKEN="refreshToken";
/** /**
* 令牌前缀 * 令牌前缀
*/ */
@@ -177,4 +187,6 @@ public class Constants
public static final Integer Del_FLAG_DELETE = 2; public static final Integer Del_FLAG_DELETE = 2;
public static final Integer Del_FLAG_EXISTS = 0; public static final Integer Del_FLAG_EXISTS = 0;
public static final long REDIS_TIME_OUT=7200;
} }

View File

@@ -48,7 +48,7 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter
} }
if (StringUtils.isNotNull(loginSiteUser) && StringUtils.isNull(SiteSecurityUtils.getAuthentication())) if (StringUtils.isNotNull(loginSiteUser) && StringUtils.isNull(SiteSecurityUtils.getAuthentication()))
{ {
tokenSiteService.verifyToken(loginSiteUser); //tokenSiteService.verifyToken(loginSiteUser);
UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(loginSiteUser, null,loginSiteUser.getAuthorities()); UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(loginSiteUser, null,loginSiteUser.getAuthorities());
authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
SecurityContextHolder.getContext().setAuthentication(authenticationToken); SecurityContextHolder.getContext().setAuthentication(authenticationToken);

View File

@@ -173,7 +173,23 @@ public class SysLoginService
recordLoginInfo(appUser); recordLoginInfo(appUser);
AsyncManager.me().execute(AsyncFactory.recordLogininfor(appUser.getName(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"))); AsyncManager.me().execute(AsyncFactory.recordLogininfor(appUser.getName(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
recordLoginInfo(appUser); recordLoginInfo(appUser);
// 生成token //tokenSiteService.noExpireCreateToken(loginSiteUser);//createTokenHourTwo // 生成token //tokenSiteService.noExpireCreateToken(loginSiteUser);//createTokenHourTwo//createTokenSevenDay
return tokenSiteService.createTokenSevenDay(loginSiteUser);
}
/**
* 生成refreshToken
* @param appUser
* @return
*/
public String loginUserrefreshToken(AppUser appUser)
{
LoginSiteUser loginSiteUser = new LoginSiteUser();
loginSiteUser.setUserId(appUser.getUserId());
loginSiteUser.setUser(appUser);
recordLoginInfo(appUser);
AsyncManager.me().execute(AsyncFactory.recordLogininfor(appUser.getName(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
recordLoginInfo(appUser);
return tokenSiteService.createTokenSevenDay(loginSiteUser); return tokenSiteService.createTokenSevenDay(loginSiteUser);
} }
@@ -294,6 +310,8 @@ public class SysLoginService
} }
String token = loginUserIdApp(existingUser); String token = loginUserIdApp(existingUser);
ajax.put(Constants.TOKEN, token); ajax.put(Constants.TOKEN, token);
ajax.put(Constants.EXPIRES_IN,Constants.REDIS_TIME_OUT);
ajax.put(Constants.REFRESH_TOKEN,loginUserrefreshToken(existingUser));
ajax.put("isNewUser", false); ajax.put("isNewUser", false);
ajax.put("idCard",existingUser.getIdCard()); ajax.put("idCard",existingUser.getIdCard());
ajax.put("isCompanyUser",existingUser.getIsCompanyUser()); ajax.put("isCompanyUser",existingUser.getIsCompanyUser());
@@ -332,6 +350,8 @@ public class SysLoginService
} }
ajax.put("isNewUser", isNewUser); ajax.put("isNewUser", isNewUser);
ajax.put(Constants.TOKEN, token); ajax.put(Constants.TOKEN, token);
ajax.put(Constants.EXPIRES_IN,Constants.REDIS_TIME_OUT);
ajax.put(Constants.REFRESH_TOKEN,loginUserrefreshToken(existingUser));
System.out.println("返回ajax====================================="+JSON.toJSONString(ajax)); System.out.println("返回ajax====================================="+JSON.toJSONString(ajax));
return ajax; return ajax;
} }
@@ -793,6 +813,8 @@ public class SysLoginService
updateAppUserCommon(specialUser, null, null, null,specialUser.getOrgType()); updateAppUserCommon(specialUser, null, null, null,specialUser.getOrgType());
String token = loginUserIdApp(specialUser); String token = loginUserIdApp(specialUser);
ajax.put(Constants.TOKEN, token); ajax.put(Constants.TOKEN, token);
ajax.put(Constants.EXPIRES_IN,Constants.REDIS_TIME_OUT);
ajax.put(Constants.REFRESH_TOKEN,loginUserrefreshToken(specialUser));
ajax.put("isNewUser", false); ajax.put("isNewUser", false);
ajax.put("idCard", StringUtil.desensitizeIdCard(specialUser.getIdCard())); ajax.put("idCard", StringUtil.desensitizeIdCard(specialUser.getIdCard()));
ajax.put("isCompanyUser", specialUser.getIsCompanyUser()); ajax.put("isCompanyUser", specialUser.getIsCompanyUser());
@@ -820,6 +842,8 @@ public class SysLoginService
updateAppUserCommon(existingUser, null, null, userType,orgType); updateAppUserCommon(existingUser, null, null, userType,orgType);
String token = loginUserIdApp(existingUser); String token = loginUserIdApp(existingUser);
ajax.put(Constants.TOKEN, token); ajax.put(Constants.TOKEN, token);
ajax.put(Constants.EXPIRES_IN,Constants.REDIS_TIME_OUT);
ajax.put(Constants.REFRESH_TOKEN,loginUserrefreshToken(existingUser));
ajax.put("isNewUser", false); ajax.put("isNewUser", false);
ajax.put("idCard", existingUser.getIdCard()); ajax.put("idCard", existingUser.getIdCard());
ajax.put("isCompanyUser", existingUser.getIsCompanyUser()); ajax.put("isCompanyUser", existingUser.getIsCompanyUser());
@@ -857,6 +881,8 @@ public class SysLoginService
phoneUser.setIsCompanyUser(userType); phoneUser.setIsCompanyUser(userType);
String token = loginUserIdApp(phoneUser); String token = loginUserIdApp(phoneUser);
ajax.put(Constants.TOKEN, token); ajax.put(Constants.TOKEN, token);
ajax.put(Constants.EXPIRES_IN,Constants.REDIS_TIME_OUT);
ajax.put(Constants.REFRESH_TOKEN,loginUserrefreshToken(phoneUser));
ajax.put("isNewUser", false); ajax.put("isNewUser", false);
ajax.put("idCard", phoneUser.getIdCard()); ajax.put("idCard", phoneUser.getIdCard());
ajax.put("isCompanyUser", phoneUser.getIsCompanyUser()); ajax.put("isCompanyUser", phoneUser.getIsCompanyUser());
@@ -881,6 +907,8 @@ public class SysLoginService
appUserService.insertAppUser(newUser); appUserService.insertAppUser(newUser);
String token = loginUserIdApp(newUser); String token = loginUserIdApp(newUser);
ajax.put(Constants.TOKEN, token); ajax.put(Constants.TOKEN, token);
ajax.put(Constants.EXPIRES_IN,Constants.REDIS_TIME_OUT);
ajax.put(Constants.REFRESH_TOKEN,loginUserrefreshToken(newUser));
ajax.put("isNewUser", true); ajax.put("isNewUser", true);
ajax.put("idCard", null); ajax.put("idCard", null);
ajax.put("isCompanyUser", userType); ajax.put("isCompanyUser", userType);
@@ -968,6 +996,27 @@ public class SysLoginService
return getAjax(appUser); return getAjax(appUser);
} }
/**
* 判断是否7天有效
* @param refreshToken
* @return
*/
public boolean checkRefreshTokenValid(String refreshToken) {
String key = CacheConstants.LOGIN_SITE_REFRESH_KEY + refreshToken;
return redisCache.hasKey(key);
}
/**
* 获取新token
* @param refreshToken
* @return
*/
public String createNewAccessToken(String refreshToken) {
String key = CacheConstants.LOGIN_SITE_REFRESH_KEY + refreshToken;
LoginSiteUser user = redisCache.getCacheObject(key);
return tokenSiteService.createTokenHourTwo(user);
}
/** /**
* 获取ajax * 获取ajax
* @param appUser * @param appUser
@@ -977,6 +1026,8 @@ public class SysLoginService
AjaxResult ajax = AjaxResult.success(); AjaxResult ajax = AjaxResult.success();
String token=loginUserIdApp(appUser); String token=loginUserIdApp(appUser);
ajax.put(Constants.TOKEN, token); ajax.put(Constants.TOKEN, token);
ajax.put(Constants.EXPIRES_IN,Constants.REDIS_TIME_OUT);
ajax.put(Constants.REFRESH_TOKEN,loginUserrefreshToken(appUser));
ajax.put("isNewUser", false); ajax.put("isNewUser", false);
ajax.put("idCard",appUser.getIdCard()); ajax.put("idCard",appUser.getIdCard());
ajax.put("isCompanyUser",appUser.getIsCompanyUser()); ajax.put("isCompanyUser",appUser.getIsCompanyUser());

View File

@@ -50,10 +50,12 @@ public class TokenSiteService
//刷新token时间为7天 //刷新token时间为7天
protected static final int REFRESH_TOKEN_OUTIME =7; protected static final int REFRESH_TOKEN_OUTIME =7;
//1秒
protected static final long MILLIS_SECOND = 1000; protected static final long MILLIS_SECOND = 1000;
//分钟
protected static final long MILLIS_MINUTE = 60 * MILLIS_SECOND; protected static final long MILLIS_MINUTE = 60 * MILLIS_SECOND;
//每天
protected static final long MILLIS_DAY = 24 * 60 * MILLIS_SECOND;
private static final Long MILLIS_MINUTE_TEN = 20 * 60 * 1000L; private static final Long MILLIS_MINUTE_TEN = 20 * 60 * 1000L;
@@ -146,7 +148,10 @@ public class TokenSiteService
String token = IdUtils.fastUUID(); String token = IdUtils.fastUUID();
LoginSiteUser.setToken(token); LoginSiteUser.setToken(token);
setUserAgent(LoginSiteUser); setUserAgent(LoginSiteUser);
refreshToken(LoginSiteUser);
//redis存2个小时
String userKey = getTokenKey(token, String.valueOf(LoginSiteUser.getUserId()));
redisCache.setCacheObject(userKey, LoginSiteUser, 2, TimeUnit.HOURS);
Map<String, Object> claims = new HashMap<>(); Map<String, Object> claims = new HashMap<>();
claims.put(Constants.APP_LOGIN_USER_KEY, token); claims.put(Constants.APP_LOGIN_USER_KEY, token);
@@ -169,7 +174,9 @@ public class TokenSiteService
String token = IdUtils.fastUUID(); String token = IdUtils.fastUUID();
LoginSiteUser.setToken(token); LoginSiteUser.setToken(token);
setUserAgent(LoginSiteUser); setUserAgent(LoginSiteUser);
refreshToken(LoginSiteUser);
//存入7天
redisCache.setCacheObject(CacheConstants.LOGIN_SITE_REFRESH_KEY + token,LoginSiteUser,REFRESH_TOKEN_OUTIME,TimeUnit.DAYS);
Map<String, Object> claims = new HashMap<>(); Map<String, Object> claims = new HashMap<>();
claims.put(Constants.APP_LOGIN_USER_KEY, token); claims.put(Constants.APP_LOGIN_USER_KEY, token);