1.新增pc个人,企业单点登录;2.新增监管端单点登录。

This commit is contained in:
chenyanchang
2026-05-24 14:49:27 +08:00
parent fb3099e90f
commit b91d9a4033
10 changed files with 415 additions and 72 deletions

View File

@@ -300,18 +300,32 @@ public class SysLoginController
return loginService.companyLoginOrRegister(loginBody);
}
@ApiOperation("单点登录-code")
@ApiOperation("一体机求职者:单点登录-code")
@PostMapping("/sso/code/login")
public AjaxResult codeLogin(@RequestBody JSONObject param) {
JSONObject result = ssoService.ssoCodeLogin(param);
return AjaxResult.success(result);
}
@ApiOperation("单点登录-token")
@ApiOperation("一体机求职者:单点登录-token")
@PostMapping("/sso/token/login")
public AjaxResult ssoTokenLogin(@RequestBody JSONObject param) {
JSONObject result = ssoService.ssoTokenLogin(param);
return AjaxResult.success(result);
}
@ApiOperation("pc端个人、企业单点登录-token")
@PostMapping("/sso/pc/code/login")
public AjaxResult ssoPcodeLogin(@RequestBody JSONObject param) {
JSONObject result = ssoService.ssoPcodeLogin(param);
return AjaxResult.success(result);
}
@ApiOperation("pc端监管单点登录-token")
@PostMapping("/sso/pcms/code/login")
public AjaxResult ssoPcmsCodeLogin(@RequestBody JSONObject param) {
JSONObject result = ssoService.ssoPcmsCodeLogin(param);
return AjaxResult.success(result);
}
}

View File

@@ -139,3 +139,5 @@ lc_web_auth:
lc_cms_auth:
appId: cloud-9793ee8a8c3d47b8871007ffc4128502
appSecret: Yi+NACK70UPg8rFvsnnfBUq1wcLD4nm6ilC4II/4C4k=
getTokenUrl: http://100.128.128.6:9081/prod-api/auth/token
getUserInfoUrl: http://100.128.128.6:9081/prod-api/system/app/authorize/user/info

View File

@@ -131,12 +131,15 @@ audioText:
tts: http://127.0.0.1:19527/synthesize
#浪潮单点登录相关
#互联网端:
lc_web_auth:
appId: cloud-out-2fb6330e9c0843e1a1424efda5d604c0
appSecret: x14lueHbtLQL7Pz2G7gE4wcGCV6TDblO5xfeu9V2wGk=
getTokenUrl: http://218.31.252.15:9081/prod-psout-api/auth/token
getUserInfoUrl: http://218.31.252.15:9081/prod-psout-api/system/app/authorize/user/info
#监管端:
lc_cms_auth:
appId: cloud-9793ee8a8c3d47b8871007ffc4128502
appSecret: Yi+NACK70UPg8rFvsnnfBUq1wcLD4nm6ilC4II/4C4k=
getTokenUrl: http://218.31.252.15:9081/prod-api/auth/token
getUserInfoUrl: http://218.31.252.15:9081/prod-api/system/app/authorize/user/info

View File

@@ -70,6 +70,8 @@ public interface IAppUserService
public AppUser selectAppuserByIdcard(String idCard);
public AppUser selectAppuserByIdcardAndUserType(String idCard, String userType);
public AppUserLky selectAppUserInfo(AppUser appUser);
public AppUser getUserInfo();

View File

@@ -488,6 +488,11 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper,AppUser> imple
return appUserMapper.selectOne(Wrappers.<AppUser>lambdaQuery().eq(AppUser::getIdCard, idCard).eq(AppUser::getDelFlag,"0").orderByDesc(AppUser::getUpdateTime).last("LIMIT 1"));
}
@Override
public AppUser selectAppuserByIdcardAndUserType(String idCard, String userType) {
return appUserMapper.selectOne(Wrappers.<AppUser>lambdaQuery().eq(AppUser::getIdCard, idCard).eq(AppUser::getDelFlag,"0").eq(AppUser::getIsCompanyUser, userType).orderByDesc(AppUser::getUpdateTime).last("LIMIT 1"));
}
@Override
public AppUserLky selectAppUserInfo(AppUser appUser) {
AppUserLky lky=new AppUserLky();

View File

@@ -73,6 +73,9 @@ public class SysUser extends BaseEntity
@Excel(name = "身份证/信用代码")
private String idCard;
//appUserId
private Long appUserId;
/** 部门对象 */
@Excels({
@Excel(name = "部门名称", targetAttr = "deptName", type = Type.EXPORT),
@@ -308,6 +311,14 @@ public class SysUser extends BaseEntity
this.idCard = idCard;
}
public Long getAppUserId() {
return appUserId;
}
public void setAppUserId(Long appUserId) {
this.appUserId = appUserId;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
@@ -331,6 +342,7 @@ public class SysUser extends BaseEntity
.append("remark", getRemark())
.append("dept", getDept())
.append("idCard", getIdCard())
.append("appUserId", getAppUserId())
.toString();
}
}

View File

@@ -111,7 +111,7 @@ public class SecurityConfig
.authorizeHttpRequests((requests) -> {
permitAllUrl.getUrls().forEach(url -> requests.antMatchers(url).permitAll());
// 对于登录login 注册register 验证码captchaImage 允许匿名访问
requests.antMatchers("/sso/token/login","/sso/code/login","/login","/loginoss", "/register", "/captchaImage","/app/login","/websocket/**","/ws/**","/speech-recognition","/speech-synthesis",
requests.antMatchers("/sso/pc/code/login","/sso/pcms/code/login","/sso/token/login","/sso/code/login","/login","/loginoss", "/register", "/captchaImage","/app/login","/websocket/**","/ws/**","/speech-recognition","/speech-synthesis",
"/cms/company/listPage","/cms/appUser/noTmlist","/getTjmhToken","/getWwTjmhToken","/getWwTjmHlwToken",
"/cms/notice/noticTotal","/cms/jobApply/zphApply","/cms/jobApply/zphApplyAgree").permitAll()
// 静态资源,可匿名访问

View File

@@ -1,5 +1,6 @@
package com.ruoyi.framework.web.service;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.cms.service.impl.AppUserServiceImpl;
import com.ruoyi.cms.util.StringUtil;
@@ -10,10 +11,15 @@ import com.ruoyi.common.core.domain.model.LoginSiteUser;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.utils.MessageUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.encrypt.EncryptUtil;
import com.ruoyi.common.utils.ip.IpUtils;
import com.ruoyi.framework.manager.AsyncManager;
import com.ruoyi.framework.manager.factory.AsyncFactory;
import com.ruoyi.system.domain.SysUserRole;
import com.ruoyi.system.mapper.SysUserRoleMapper;
import com.ruoyi.system.service.impl.SysUserServiceImpl;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.client.methods.CloseableHttpResponse;
@@ -27,8 +33,9 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.concurrent.TimeUnit;
import java.util.List;
/**
* @Author: chenyanchang
@@ -44,9 +51,19 @@ public class SsoService {
@Autowired
AppUserServiceImpl appUserService;
@Autowired
SysUserServiceImpl sysUserService;
@Autowired
private TokenSiteService tokenSiteService;
@Autowired
private TokenService tokenService;
@Autowired
private SysUserRoleMapper sysUserRoleMapper;
//一体机pc个人企业
@Value("${lc_web_auth.appId}")
String webAppId;
@Value("${lc_web_auth.appSecret}")
@@ -56,15 +73,27 @@ public class SsoService {
@Value("${lc_web_auth.getUserInfoUrl}")
String WEB_GET_USER_INFO;
final String APP_USER_TOKEN_KEY = "app:user:token:";
//pc监管
@Value("${lc_cms_auth.appId}")
String cmsAppId;
@Value("${lc_cms_auth.appSecret}")
String cmsAppSecret;
@Value("${lc_cms_auth.getTokenUrl}")
String CMS_GET_TOKEN_URL;
@Value("${lc_cms_auth.getUserInfoUrl}")
String CMS_GET_USER_INFO;
/**
* 一体机单点登录-code
* @param param
* @return
*/
public JSONObject ssoCodeLogin(JSONObject param) {
if (ObjectUtils.isEmpty(param)) {
throw new RuntimeException("请求参数不能为空");
}
String code = param.getString("code");
//String userType = param.getString("userType");
//通过code获取token
JSONObject json = new JSONObject();
json.put("code", code);
@@ -95,23 +124,28 @@ public class SsoService {
}
}
//用身份证号查询用户
AppUser appUser = appUserService.selectAppuserByIdcard(personCardNo);
//用身份证号查询用户 用户类型01个人02企业
// 转换成本地app角色0企业1求职者2网格员 3内部政府人员 4其他浪潮用
String userType = userJson.getString("userType");
userType = "01".equals(userType) ? "1" : "0";
AppUser appUser = appUserService.selectAppuserByIdcardAndUserType(personCardNo, userType);
if (appUser == null) {
//用户不存在,则先保存用户
appUser = saveAppUser(userJson);
appUser = saveAppUser(userJson, userType);
}
//用户存在生成本系统用户的token
String token = loginApp(appUser, info.getString("userName"));
//缓存token
// String userKey = APP_USER_TOKEN_KEY + userJson.getString("userId");
// redisCache.setCacheObject(userKey, token, 2, TimeUnit.HOURS);
String token = loginAppUser(appUser, userJson.getString("userName"));
JSONObject backJson = new JSONObject();
backJson.put("token", token);
backJson.put("lcToken", lcToken);
return backJson;
}
/**
* 一体机单点登录-token(浪潮token)
* @param param
* @return
*/
public JSONObject ssoTokenLogin(JSONObject param) {
if (ObjectUtils.isEmpty(param)) {
throw new RuntimeException("请求参数不能为空");
@@ -141,17 +175,167 @@ public class SsoService {
}
}
//用身份证号查询用户
AppUser appUser = appUserService.selectAppuserByIdcard(personCardNo);
//用身份证号查询用户 用户类型01个人02企业
// 转换成本地app角色0企业1求职者2网格员 3内部政府人员 4其他浪潮用
String userType = userJson.getString("userType");
userType = "01".equals(userType) ? "1" : "0";
AppUser appUser = appUserService.selectAppuserByIdcardAndUserType(personCardNo, userType);
if (appUser == null) {
//用户不存在,则先保存用户
appUser = saveAppUser(userJson);
appUser = saveAppUser(userJson, userType);
}
//用户存在生成本系统用户的token
String token = loginApp(appUser, info.getString("userName"));
//缓存token
// String userKey = APP_USER_TOKEN_KEY + userJson.getString("userId");
// redisCache.setCacheObject(userKey, token, 2, TimeUnit.HOURS);
String token = loginAppUser(appUser, userJson.getString("userName"));
JSONObject backJson = new JSONObject();
backJson.put("token", token);
backJson.put("lcToken", lcToken);
return backJson;
}
/**
* pc端个人、企业单点登录-code
* @param param
* @return
*/
public JSONObject ssoPcodeLogin(JSONObject param) {
if (ObjectUtils.isEmpty(param)) {
throw new RuntimeException("请求参数不能为空");
}
//浪潮code
String code = param.getString("code");
//用户类型
//通过code获取token
JSONObject json = new JSONObject();
json.put("code", code);
String lcToken = getToken(WEB_GET_TOKEN_URL, null, json.toJSONString());
if (StringUtils.isEmpty(lcToken)) {
throw new RuntimeException("获取token失败");
}
//获取用户信息
JSONObject pJson = new JSONObject();
pJson.put("appId", webAppId);
pJson.put("appSecret", webAppSecret);
JSONObject userJson = getUserInfo(WEB_GET_USER_INFO, lcToken, pJson.toJSONString());
if (ObjectUtils.isEmpty(userJson)) {
throw new RuntimeException("获取用户信息失败");
}
//获取身份证号
String personCardNo = null;
JSONObject info = null;
if (userJson.containsKey("info")) {
info = userJson.getJSONObject("info");
if (ObjectUtils.isNotEmpty(info) && info.containsKey("personCardNo")) {
personCardNo = info.getString("personCardNo");
//解密处理
if (StringUtils.isEmpty(personCardNo)) {
throw new RuntimeException("获取用户证件信息失败");
}
personCardNo = EncryptUtil.decryptByAppIdAndSecret(personCardNo, webAppId, webAppSecret);
}
}
//用身份证号查询用户 用户类型01个人02企业
// 转换成本地app角色0企业1求职者2网格员 3内部政府人员 4其他浪潮用
//userType对应appuser的isCompanyUser
String userType = userJson.getString("userType");
userType = "01".equals(userType) ? "1" : "0";
//1.先查appuser,不存在,则新增
AppUser appUser = appUserService.selectAppuserByIdcardAndUserType(personCardNo, userType);
if (appUser == null) {
appUser = saveAppUser(userJson, userType);
}
//2.再查sysuser,不存在,则新增
SysUser sysUser = sysUserService.selectUserByIdCard(personCardNo);
if (sysUser == null) {
sysUser = saveSysUser(userJson, appUser.getUserId());
}
//用户存在生成本系统用户的token
String token = loginSysUser(sysUser, userJson.getString("userName"));
JSONObject backJson = new JSONObject();
backJson.put("token", token);
backJson.put("lcToken", lcToken);
return backJson;
}
/**
* pc端监管端单点登录-code
* @param param
* @return
*/
public JSONObject ssoPcmsCodeLogin(JSONObject param) {
if (ObjectUtils.isEmpty(param)) {
throw new RuntimeException("请求参数不能为空");
}
//浪潮code
String code = param.getString("code");
//通过code获取token
JSONObject json = new JSONObject();
json.put("code", code);
String lcToken = getToken(CMS_GET_TOKEN_URL, null, json.toJSONString());
if (StringUtils.isEmpty(lcToken)) {
throw new RuntimeException("获取token失败");
}
//获取用户信息
JSONObject pJson = new JSONObject();
pJson.put("appId", cmsAppId);
pJson.put("appSecret", cmsAppSecret);
JSONObject userJson = getUserInfo(CMS_GET_USER_INFO, lcToken, pJson.toJSONString());
if (ObjectUtils.isEmpty(userJson)) {
throw new RuntimeException("获取用户信息失败");
}
//获取身份证号
String personCardNo = null;
JSONObject info = null;
if (userJson.containsKey("info")) {
info = userJson.getJSONObject("info");
if (ObjectUtils.isNotEmpty(info) && info.containsKey("personCardNo")) {
personCardNo = info.getString("personCardNo");
//解密处理
if (StringUtils.isEmpty(personCardNo)) {
throw new RuntimeException("获取用户证件信息失败");
}
personCardNo = EncryptUtil.decryptByAppIdAndSecret(personCardNo, cmsAppId, cmsAppSecret);
}
}
//用身份证号查询用户 用户类型01个人02企业
// 转换成本地app角色0企业1求职者2网格员 3内部政府人员 4其他浪潮用
//取角色判断是网格员2还是内部工作者3
String userType = null;
if(userJson.containsKey("roles")) {
JSONObject role = userJson.getJSONArray("roles").getJSONObject(0);
if (role != null && role.containsKey("roleId")) {
/*1101(求职者)、1102(招聘者)、1103(网格员)、1104(内部工作者)*/
Long roleId = role.getLong("roleId");
if (roleId != null && roleId.equals(1103L)) {
userType = "2";//2网格员
}
}
}
Long appUserId = null;
if (StringUtils.isNotEmpty(userType) && "2".equals(userType)) {
//1.先查appuser,不存在,则新增
AppUser appUser = appUserService.selectAppuserByIdcardAndUserType(personCardNo, userType);
if (appUser == null) {
appUser = saveAppUser(userJson, userType);
appUserId = appUser.getUserId();
}
}
//2.再查sysuser,不存在,则新增
//身份证为空则查userId
SysUser sysUser = null;
if (StringUtils.isNotEmpty(personCardNo)) {
sysUser = sysUserService.selectUserByIdCard(personCardNo);
} else {
sysUser = sysUserService.selectUserById(userJson.getLong("userId"));
}
if (sysUser == null) {
sysUser = saveSysUser(userJson, appUserId);
}
//用户存在生成本系统用户的token
String token = loginSysUser(sysUser, userJson.getString("userName"));
JSONObject backJson = new JSONObject();
backJson.put("token", token);
backJson.put("lcToken", lcToken);
@@ -160,36 +344,40 @@ public class SsoService {
//获取token
private String getToken(String url, String token, String params) {
try {
String result = sendHttpPost(url, token, params);
if (StringUtils.isEmpty(result)) {
throw new RuntimeException("获取token失败");
}
JSONObject json = JSONObject.parseObject(result);
if (json.getInteger("code") == 200) {
return json.getString("token");
} else if (json.getInteger("code") == 401) {
throw new RuntimeException("认证过期");
} else {
throw new RuntimeException("获取token失败");
}
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
String result = sendHttpPost(url, token, params);
if (StringUtils.isEmpty(result)) {
throw new RuntimeException("获取token失败");
}
JSONObject json = JSONObject.parseObject(result);
if (json.getInteger("code") == 200) {
return json.getString("token");
} else if (json.getInteger("code") == 401) {
throw new RuntimeException("认证过期");
} else {
throw new RuntimeException("获取token失败");
}
}
//模拟登录
public String loginApp(AppUser appUser, String userName){
//模拟登录appuser
public String loginAppUser(AppUser appUser, String userName){
LoginSiteUser loginSiteUser = new LoginSiteUser();
loginSiteUser.setUserId(appUser.getUserId());
loginSiteUser.setUser(appUser);
// recordLoginInfo(appUser);
AsyncManager.me().execute(AsyncFactory.recordLogininfor(userName, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
// recordLoginInfo(appUser);
// 生成token
return tokenSiteService.createTokenHourTwo(loginSiteUser);
}
//模拟登录sysuser
public String loginSysUser(SysUser sysUser, String userName){
LoginUser loginUser = new LoginUser();
loginUser.setUserId(sysUser.getUserId());
loginUser.setUser(sysUser);
AsyncManager.me().execute(AsyncFactory.recordLogininfor(userName, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
// 生成token
return tokenService.createTokenHourTwo(loginUser);
}
//获取用户信息
private JSONObject getUserInfo(String url, String token, String params) {
try {
@@ -210,22 +398,24 @@ public class SsoService {
}
}
//保存用户
private AppUser saveAppUser(JSONObject userJson) {
JSONObject info = userJson.getJSONObject("info");
//保存appuser用户
private AppUser saveAppUser(JSONObject userJson, String isCompanyUser) {
JSONObject info = userJson.containsKey("info") ? userJson.getJSONObject("info") : null;
AppUser appUser = new AppUser();
//app角色0企业1求职者2网格员 3内部政府人员 4其他浪潮用
appUser.setIsCompanyUser("1");
appUser.setIsCompanyUser(isCompanyUser);
appUser.setUserId(userJson.getLong("userId"));
appUser.setName(info.getString("personName"));
appUser.setSex(info.getString("personSex"));
appUser.setBirthDate(info.getString("personBirthday"));
appUser.setEducation(StringUtil.convertEducation(info.getString("personEducation")));
appUser.setPoliticalAffiliation(info.getString("personPolitical"));
appUser.setAddress(info.getString("liveAddress"));
appUser.setWorkExperience(StringUtil.convertExp(info.getInteger("personYearsWorking")));
appUser.setNation(info.getString("personNation"));
appUser.setDomicileAddress(info.getString("householdAddress"));
appUser.setName(info != null ? info.getString("personName") : userJson.getString("nickName"));
appUser.setSex(info != null ? info.getString("personSex") : userJson.getString("sex"));
if (info != null) {
appUser.setBirthDate(info.getString("personBirthday"));
appUser.setEducation(StringUtil.convertEducation(info.getString("personEducation")));
appUser.setPoliticalAffiliation(info.getString("personPolitical"));
appUser.setAddress(info.getString("liveAddress"));
appUser.setWorkExperience(StringUtil.convertExp(info.getInteger("personYearsWorking")));
appUser.setNation(info.getString("personNation"));
appUser.setDomicileAddress(info.getString("householdAddress"));
}
String date = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date());
appUser.setCreateTime(date);
appUser.setUpdateTime(date);
@@ -234,15 +424,14 @@ public class SsoService {
appUser.setLoginIp(IpUtils.getIpAddr());
//获取身份证,再获取年龄
String personCardNo = info.getString("personCardNo");
String personCardNo = info != null ? info.getString("personCardNo") : userJson.getString("idCardNo");
//解密处理
if (StringUtils.isNotEmpty(personCardNo)) {
personCardNo = EncryptUtil.decryptByAppIdAndSecret(personCardNo, webAppId, webAppSecret);
appUser.setAge(StringUtil.getAgeByIdNumber(personCardNo));
appUser.setIdCard(personCardNo);
}
String phone = info.getString("personPhone");
String phone = info != null ? info.getString("personPhone") : userJson.getString("phonenumber");
//解密电话号码
if (StringUtils.isNotEmpty(phone)) {
phone = EncryptUtil.decryptByAppIdAndSecret(phone, webAppId, webAppSecret);
@@ -254,22 +443,85 @@ public class SsoService {
return appUser;
}
/**
* 保存sysuser
* @param userJson
* @return
*/
private SysUser saveSysUser(JSONObject userJson, Long appUserId) {
JSONObject info = userJson.containsKey("info") ? userJson.getJSONObject("info") : null;
SysUser sysUser = new SysUser();
sysUser.setAppUserId(appUserId);
sysUser.setUserId(userJson.getLong("userId"));
sysUser.setUserName(userJson.getString("userName"));
sysUser.setNickName(userJson.getString("nickName"));
sysUser.setEmail(userJson.getString("email"));
sysUser.setSex(userJson.getString("sex"));
sysUser.setStatus("0");
sysUser.setDelFlag("0");
String date = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date());
sysUser.setCreateTime(date);
sysUser.setUpdateTime(date);
sysUser.setLoginDate(new Date());
sysUser.setCreateBy("system");
sysUser.setLoginIp(IpUtils.getIpAddr());
//获取身份证
String personCardNo = info != null && info.containsKey("personCardNo") ? info.getString("personCardNo") : userJson.getString("idCardNo");
//解密处理
if (StringUtils.isNotEmpty(personCardNo)) {
personCardNo = EncryptUtil.decryptByAppIdAndSecret(personCardNo, webAppId, webAppSecret);
sysUser.setIdCard(personCardNo);
}
String phone = info != null && info.containsKey("personPhone") ? info.getString("personPhone") : userJson.getString("phonenumber");
//解密电话号码
if (StringUtils.isNotEmpty(phone)) {
phone = EncryptUtil.decryptByAppIdAndSecret(phone, webAppId, webAppSecret);
sysUser.setPhonenumber(phone);
}
//部门
if (userJson.containsKey("dept")) {
JSONObject dept = userJson.getJSONObject("dept");
Long deptId = dept != null && dept.containsKey("deptId") ? dept.getLong("deptId") : null;
sysUser.setDeptId(deptId);
}
sysUserService.insertUser(sysUser);
//添加权限
JSONArray roles = userJson.getJSONArray("roles");
if (CollectionUtils.isNotEmpty(roles) && roles.size() != 0) {
List<SysUserRole> list = new ArrayList<>();
for (int i=0; i<roles.size(); i++) {
JSONObject json = roles.getJSONObject(i);
SysUserRole sysUserRole = new SysUserRole();
sysUserRole.setRoleId(json.getLong("roleId"));
sysUserRole.setUserId(sysUser.getUserId());
list.add(sysUserRole);
}
//新增角色
sysUserRoleMapper.batchUserRole(list);
}
return sysUser;
}
//发送请求
private String sendHttpPost(String url, String token, String params) {
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
HttpPost httpPost = new HttpPost(url);
if (StringUtils.isNotEmpty(token)) {
httpPost.setHeader("Authorization", "Bearer " + token);
}
httpPost.setEntity(new StringEntity(params, "UTF-8"));
httpPost.setHeader("Content-Type", "application/json");
try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
String responseBody = EntityUtils.toString(response.getEntity(), "UTF-8");
return responseBody;
}
} catch (Exception e) {
e.printStackTrace();
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(url);
if (StringUtils.isNotEmpty(token)) {
httpPost.setHeader("Authorization", "Bearer " + token);
}
httpPost.setEntity(new StringEntity(params, "UTF-8"));
httpPost.setHeader("Content-Type", "application/json");
try {
CloseableHttpResponse response = httpClient.execute(httpPost);
String responseBody = EntityUtils.toString(response.getEntity(), "UTF-8");
return responseBody;
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
return null;
}
}

View File

@@ -4,6 +4,8 @@ import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import javax.servlet.http.HttpServletRequest;
import com.ruoyi.common.core.domain.model.LoginSiteUser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -70,7 +72,8 @@ public class TokenService
Claims claims = parseToken(token);
// 解析对应的权限以及用户信息
String uuid = (String) claims.get(Constants.LOGIN_USER_KEY);
String userKey = getTokenKey(uuid);
String userId = (String) claims.get(Constants.LOGIN_USER_ID);
String userKey = getTokenKey(uuid, userId);
LoginUser user = redisCache.getCacheObject(userKey);
return user;
}
@@ -120,9 +123,52 @@ public class TokenService
Map<String, Object> claims = new HashMap<>();
claims.put(Constants.LOGIN_USER_KEY, token);
claims.put(Constants.LOGIN_USER_ID, String.valueOf(loginUser.getUserId()));
// 当前时间 + 30 分钟
long currentTimeMillis = System.currentTimeMillis();
long expireTimeMillis = currentTimeMillis + ((long) expireTime * 60 * 1000); // 30分钟 = 1800000 毫秒
long expireTimeSeconds = expireTimeMillis / 1000; // 转换为秒(时间戳)
claims.put(Constants.EXP, expireTimeSeconds);
return createToken(claims);
}
/**
* 超时时间为2个小时
* @param loginUser
* @return
*/
public String createTokenHourTwo(LoginUser loginUser)
{
String token = IdUtils.fastUUID();
loginUser.setToken(token);
setUserAgent(loginUser);
//缓存2个小时
refreshTokenTwoHour(loginUser);
Map<String, Object> claims = new HashMap<>();
claims.put(Constants.LOGIN_USER_KEY, token);
claims.put(Constants.LOGIN_USER_ID, String.valueOf(loginUser.getUserId()));
// 当前时间 + 120 分钟
long currentTimeMillis = System.currentTimeMillis();
long expireTimeMillis = currentTimeMillis + ((long) expireTime * 4 * 60 * 1000); // 12分钟 = 1800000 毫秒
long expireTimeSeconds = expireTimeMillis / 1000; // 转换为秒(时间戳)
claims.put(Constants.EXP, expireTimeSeconds);
return createToken(claims);
}
/**
* 缓存2个小时
* @param loginUser
*/
public void refreshTokenTwoHour(LoginUser loginUser)
{
loginUser.setLoginTime(System.currentTimeMillis());
loginUser.setExpireTime(loginUser.getLoginTime() + expireTime * 4 * MILLIS_MINUTE);
// 根据uuid将LoginSiteUser缓存
String userKey = getTokenKey(loginUser.getToken(), String.valueOf(loginUser.getUserId()));
redisCache.setCacheObject(userKey, loginUser, 2, TimeUnit.HOURS);
}
/**
* 验证令牌有效期相差不足20分钟自动刷新缓存
*
@@ -149,7 +195,7 @@ public class TokenService
loginUser.setLoginTime(System.currentTimeMillis());
loginUser.setExpireTime(loginUser.getLoginTime() + expireTime * MILLIS_MINUTE);
// 根据uuid将loginUser缓存
String userKey = getTokenKey(loginUser.getToken());
String userKey = getTokenKey(loginUser.getToken(), String.valueOf(loginUser.getUserId()));
redisCache.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES);
}
@@ -228,4 +274,9 @@ public class TokenService
{
return CacheConstants.LOGIN_TOKEN_KEY + uuid;
}
private String getTokenKey(String uuid, String userId)
{
return CacheConstants.LOGIN_TOKEN_KEY + userId + ":" + uuid;
}
}

View File

@@ -170,6 +170,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="createBy != null and createBy != ''">create_by,</if>
<if test="remark != null and remark != ''">remark,</if>
<if test="idCard != null and idCard != ''">id_card,</if>
<if test="appUserId != null and appUserId != ''">app_user_id,</if>
create_time
)values(
<if test="userId != null and userId != ''">#{userId},</if>
@@ -185,6 +186,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="createBy != null and createBy != ''">#{createBy},</if>
<if test="remark != null and remark != ''">#{remark},</if>
<if test="idCard != null and idCard != ''">#{idCard},</if>
<if test="appUserId != null and appUserId != ''">#{appUserId},</if>
sysdate()
)
</insert>