1.新增pc个人,企业单点登录;2.新增监管端单点登录。
This commit is contained in:
@@ -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()
|
||||
// 静态资源,可匿名访问
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user