Commit 660b9156 authored by 唐峰's avatar 唐峰

合同签署处理登录渠道

parent e88fe98e
......@@ -37,6 +37,8 @@ public interface Constants {
String X_AUTH_APP_ID = "qg-app-id";
String X_AUTH_FROM = "qg-registered-from";
//兼容可能的渠道
String X_AUTH_FROM_ = "vccChannel";
String X_STMS_TOKEN = "qg-stms-token";
String X_BEHAVIOR_TYPE = "qg-behavior-type";
......
......@@ -76,6 +76,7 @@ public class PasswordFreeAccessValidateAdvisor {
// 当前请求的phoneNo/userId
String phoneNo = request.getParameter(Constants.PHONE_NO);
String userId = request.getParameter(USER_ID);
String from = request.getParameter(Constants.X_AUTH_FROM);
if (StringUtils.isBlank(phoneNo) && StringUtils.isBlank(userId)) {
log.info("非法请求 - 缺少参数, phoneNo={}, userId={}, clientIp={}", phoneNo, userId, clientIp);
return false;
......@@ -97,7 +98,7 @@ public class PasswordFreeAccessValidateAdvisor {
// }
// 当前session
SessionStruct session = XyqbSessionContextHolder.getXSessionFromRedis(token,tenantId);
SessionStruct session = XyqbSessionContextHolder.getXSessionFromRedis(token,tenantId,from == null ? null :Long.parseLong(from));
if (Objects.isNull(session) || Objects.isNull(session.getValues()) || Objects.isNull(session.getValues().getUser())) {
log.info("非法请求 - 未登录, token={}, phoneNo={}, userId={}, clientIp={}", token, phoneNo, userId, clientIp);
return false;
......
......@@ -62,6 +62,18 @@ public interface IBaseController {
return Integer.parseInt(tenantIdStr);
}
default Long getRegisteredFrom() {
String from = getRequest().getHeader(Constants.X_AUTH_FROM);
if (StringUtils.isNotEmpty(from)) {
return Long.parseLong(from);
}
from = getRequest().getHeader(Constants.X_AUTH_FROM_);
if (StringUtils.isNotEmpty(from)) {
return Long.parseLong(from);
}
return null;
}
default SessionStruct getCurrentSessionFromRedis() {
return getXSessionFromRedis();
}
......
......@@ -550,6 +550,7 @@ public class UserController implements IBaseController {
if (tenantId == null) {
tenantId = tenantIdHeader;
}
Long registeredFrom = getRegisteredFrom();
Map<String, Object> result = new HashMap<>();
result.put("exist", false);
if (StringUtils.isEmpty(token)) {
......@@ -558,12 +559,12 @@ public class UserController implements IBaseController {
if (token.contains(Constants.TOKEN_MASTER)) {
return JsonResult.buildSuccessResult(null, result);
}
SessionStruct sessionStruct = XyqbSessionContextHolder.getXSessionFromRedis(token, tenantId);
SessionStruct sessionStruct = XyqbSessionContextHolder.getXSessionFromRedis(token, tenantId,registeredFrom);
if (sessionStruct == null || sessionStruct.getValues() == null) {
// 使用token去电商查询信息, 如果token 不包含本系统token前缀
if (!token.contains(prefix)) {
findTokenExchange(token, tenantId);
sessionStruct = XyqbSessionContextHolder.getXSessionFromRedis(token, tenantId);
sessionStruct = XyqbSessionContextHolder.getXSessionFromRedis(token, tenantId,registeredFrom);
if (sessionStruct == null || sessionStruct.getValues() == null) {
return JsonResult.buildSuccessResult(null, result);
}
......@@ -596,7 +597,7 @@ public class UserController implements IBaseController {
if (tenantId == null) {
tenantId = tenantIdHeader;
}
Long registeredFrom = getRegisteredFrom();
TokenExchange tokenExchange = new TokenExchange();
if (StringUtils.isEmpty(token)) {
return JsonResult.buildSuccessResult(null, tokenExchange);
......@@ -604,7 +605,7 @@ public class UserController implements IBaseController {
if (token.contains(Constants.TOKEN_MASTER)) {
return JsonResult.buildSuccessResult(null, tokenExchange);
}
SessionStruct sessionStruct = XyqbSessionContextHolder.getXSessionFromRedis(token, tenantId);
SessionStruct sessionStruct = XyqbSessionContextHolder.getXSessionFromRedis(token, tenantId,registeredFrom);
if (sessionStruct == null || sessionStruct.getValues() == null) {
return JsonResult.buildSuccessResult(null, tokenExchange);
}
......
......@@ -3,6 +3,7 @@ package cn.quantgroup.xyqb.controller.internal.user;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.aspect.accessable.IpValidator;
import cn.quantgroup.xyqb.constant.UserConstant;
import cn.quantgroup.xyqb.controller.IBaseController;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.exception.VerificationCodeErrorException;
import cn.quantgroup.xyqb.model.JsonResult;
......@@ -27,7 +28,7 @@ import java.util.Objects;
@Slf4j
@RestController
@RequestMapping("/api")
public class UserApiController {
public class UserApiController implements IBaseController {
@Resource
private IUserService userService;
......@@ -71,6 +72,7 @@ public class UserApiController {
if (Objects.isNull(token) || !ValidationUtil.validateToken(token)) {
return JsonResult.buildErrorStateResult("token regular invalid ", token);
}
Long registeredFrom = getRegisteredFrom();
String tokenKey = Constants.SESSION_PREFIX + token;
String tokenKey2;
......@@ -85,7 +87,7 @@ public class UserApiController {
/* token存在且需要延续时,进一步判断session是否有效,有效时,自动续期 */
if (Boolean.logicalAnd(exist, prolong)) {
// 获取session信息
SessionStruct sessionStruct = XyqbSessionContextHolder.getXSessionFromRedis(token,tenantId);
SessionStruct sessionStruct = XyqbSessionContextHolder.getXSessionFromRedis(token,tenantId,registeredFrom);
if (Objects.isNull(sessionStruct)) {
log.info("延续token:[{}]生命期,result:[{}],SessionStruct:{}", token, false, sessionStruct);
/* 如果没有获取到session信息则返回错误信息 */
......
......@@ -40,6 +40,7 @@ public class InnerInterceptor implements HandlerInterceptor {
//所有开放出去的外部接口,都需要验证租户id和注册来源
String tenantId = request.getHeader(Constants.X_AUTH_TENANT);
String registeredFrom = request.getHeader(Constants.X_AUTH_FROM);
registeredFrom = org.apache.commons.lang3.StringUtils.isEmpty(registeredFrom) ? request.getHeader(Constants.X_AUTH_FROM_) : registeredFrom;
String stmsToken = request.getHeader(Constants.X_AUTH_TOKEN);
if (StringUtils.isEmpty(tenantId)) {
throw new BizException(BizExceptionEnum.UN_EXIT_TENANT_ID);
......@@ -49,7 +50,7 @@ public class InnerInterceptor implements HandlerInterceptor {
throw new BizException(BizExceptionEnum.UN_EXIT_STMS_TOKEN);
}
SessionStruct sessionStruct = XyqbSessionContextHolder.getXSessionFromRedis(stmsToken, Integer.valueOf(tenantId));
SessionStruct sessionStruct = XyqbSessionContextHolder.getXSessionFromRedis(stmsToken, Integer.valueOf(tenantId),org.apache.commons.lang3.StringUtils.isEmpty(registeredFrom) ? null:Long.valueOf(registeredFrom));
if (sessionStruct == null) {
OauthResult oauthResult = stmsRemoteService.checkToken(stmsToken);
......
......@@ -582,7 +582,7 @@ public class UserServiceImpl implements IUserService, IBaseController {
JSONArray array = new JSONArray();
array.add(json);
registeredNotifyBlackHoleRabbitTemplate.convertAndSend(exchange, routingKey, array.toString());
log.info("登录补签合同事件:userId:{},templateIds:{}",user.getId(),templateId);
});
log.info("登录补签合同事件:userId:{},templateIds:{}",user.getId(),templates);
}
}
......@@ -70,7 +70,7 @@ public class LoginContext {
//第三步、发送登录成功消息
SessionStruct sessionStruct = XyqbSessionContextHolder.getXSession();
Long registeredFrom = sessionStruct.getRegisteredFrom();
if (sessionStruct.getValues() != null && sessionStruct.getValues().getLoginProperties() != null) {
if (registeredFrom == null && sessionStruct.getValues() != null && sessionStruct.getValues().getLoginProperties() != null) {
registeredFrom = sessionStruct.getValues().getLoginProperties().getCreatedFrom();
}
......
......@@ -130,12 +130,14 @@ public class XyqbSessionContextHolder {
public static SessionStruct getXSessionFromRedis() {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String token = request.getHeader(Constants.X_AUTH_TOKEN);
String from = request.getHeader(Constants.X_AUTH_FROM);
from = StringUtils.isEmpty(from) ? request.getHeader(Constants.X_AUTH_FROM_) : from;
int tenantId= UserConstant.defaultTenantId;
String tenantIdString = request.getHeader(Constants.X_AUTH_TENANT);
if(StringUtils.isNotEmpty(tenantIdString)){
tenantId = Integer.parseInt(tenantIdString);
}
return getXSessionFromRedis(token,tenantId);
return getXSessionFromRedis(token,tenantId,StringUtils.isEmpty(from) ? null:Long.valueOf(from));
}
public static String getXSessionFromTenantRedis() {
......@@ -143,7 +145,7 @@ public class XyqbSessionContextHolder {
return request.getHeader(Constants.X_AUTH_TENANT);
}
public static SessionStruct getXSessionFromRedis(String token,Integer tenantId) {
public static SessionStruct getXSessionFromRedis(String token,Integer tenantId,Long registeredFrom) {
String linkToken;
if (UserConstant.defaultTenantId.equals(tenantId)) {
linkToken = Constants.Session.USER_SESSION_CACHE + token;
......@@ -165,7 +167,8 @@ public class XyqbSessionContextHolder {
} else {
if (values.getLoginProperties() != null) {
sessionStruct.setTenantId(values.getLoginProperties().getTenantId());
sessionStruct.setRegisteredFrom(values.getLoginProperties().getCreatedFrom());
//sessionStruct.setRegisteredFrom(values.getLoginProperties().getCreatedFrom());
sessionStruct.setRegisteredFrom(registeredFrom);
}
}
sessionStruct.setSid(token);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment