Commit 1d5026c7 authored by 王亮's avatar 王亮

union query user.

parent 6d7cde82
......@@ -37,6 +37,7 @@ public interface Constants {
String X_AUTH_APP_ID = "qg-app-id";
String X_AUTH_FROM = "qg-registered-from";
String X_STMS_TOKEN = "qg-stms-token";
String X_BEHAVIOR_TYPE = "qg-behavior-type";
String X_BEHAVIOR_ID = "qg-behavior-id";
......
package cn.quantgroup.xyqb.config.http;
import cn.quantgroup.xyqb.filter.BehaviorInterceptor;
import cn.quantgroup.xyqb.filter.InnerInterceptor;
import cn.quantgroup.xyqb.filter.TokenInterceptor;
import cn.quantgroup.xyqb.service.captcha.IQuantgroupCaptchaService;
import cn.quantgroup.xyqb.remote.StmsRemoteService;
import cn.quantgroup.xyqb.service.session.ISessionService;
import cn.quantgroup.xyqb.service.v2.BehaviorContext;
import cn.quantgroup.xyqb.thirdparty.jcaptcha.AbstractManageableImageCaptchaService;
import org.hibernate.validator.HibernateValidator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.format.FormatterRegistry;
import org.springframework.stereotype.Component;
......@@ -27,6 +26,8 @@ public class MyWebMvcConfigurer extends WebMvcConfigurerAdapter {
private ISessionService sessionService;
@Autowired
private BehaviorContext behaviorContext;
@Autowired
private StmsRemoteService stmsRemoteService;
@Override
public void addFormatters(FormatterRegistry registry) {
......@@ -53,9 +54,12 @@ public class MyWebMvcConfigurer extends WebMvcConfigurerAdapter {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new TokenInterceptor(sessionService)).addPathPatterns("/v2/**")
.excludePathPatterns("/v2/behavior/code");
registry.addInterceptor(new BehaviorInterceptor(behaviorContext)).addPathPatterns("/v2/**","/api/v2")
registry.addInterceptor(new BehaviorInterceptor(behaviorContext)).addPathPatterns("/v2/**", "/api/v2/**")
.excludePathPatterns("/v2/behavior/code");
registry.addInterceptor(new InnerInterceptor(sessionService, stmsRemoteService)).addPathPatterns("/api/v2/**");
}
}
\ No newline at end of file
......@@ -21,6 +21,10 @@ public enum BizExceptionEnum {
ERROR_WECHAT_LOGIN("1010","微信登录失败"),
ERROR_INTERNAL_LOGIN("1011","公开接口不能调用内部登录方式"),
ERROR_LOGIN_PARAM("1012","登录参数异常,请按接口文档对接"),
UN_EXIT_STMS_TOKEN("1013","stms的token不存在"),
UN_VALID_STMS_TOKEN("1014","无效的stms的token"),
UN_PERMISSION_STMS("1015","没有内部接口访问权限"),
......
package cn.quantgroup.xyqb.filter;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.exception.BizException;
import cn.quantgroup.xyqb.exception.BizExceptionEnum;
import cn.quantgroup.xyqb.model.OauthResult;
import cn.quantgroup.xyqb.model.session.SessionStruct;
import cn.quantgroup.xyqb.remote.StmsRemoteService;
import cn.quantgroup.xyqb.service.session.ISessionService;
import cn.quantgroup.xyqb.session.XyqbSessionContextHolder;
import cn.quantgroup.xyqb.util.StringUtils;
import com.alibaba.fastjson.JSONObject;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class InnerInterceptor implements HandlerInterceptor {
private final ISessionService sessionService;
private final StmsRemoteService stmsRemoteService;
public InnerInterceptor(ISessionService sessionService, StmsRemoteService stmsRemoteService) {
this.sessionService = sessionService;
this.stmsRemoteService = stmsRemoteService;
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//所有开放出去的外部接口,都需要验证租户id和注册来源
String tenantId = request.getHeader(Constants.X_AUTH_TENANT);
String registeredFrom = request.getHeader(Constants.X_AUTH_FROM);
String stmsToken = request.getHeader(Constants.X_AUTH_TOKEN);
if (StringUtils.isEmpty(tenantId)) {
throw new BizException(BizExceptionEnum.UN_EXIT_TENANT_ID);
}
if (StringUtils.isEmpty(registeredFrom)) {
throw new BizException(BizExceptionEnum.UN_EXIT_REGISTERED_FROM);
}
if (StringUtils.isEmpty(stmsToken)) {
throw new BizException(BizExceptionEnum.UN_EXIT_STMS_TOKEN);
}
SessionStruct sessionStruct = XyqbSessionContextHolder.getXSessionFromRedis(stmsToken);
if (sessionStruct == null) {
OauthResult oauthResult = stmsRemoteService.checkToken(stmsToken);
if (oauthResult != null && 2000 == oauthResult.getCode()) {
OauthResult permissionResult = stmsRemoteService.checkPermission(stmsToken,
request.getRequestURI(), tenantId);
if (permissionResult != null && 2000 == permissionResult.getCode()) {
JSONObject jsonObject = JSONObject.parseObject((String)permissionResult.getData());
String userId = jsonObject.getString("id");
String userName = jsonObject.getString("name");
sessionStruct = XyqbSessionContextHolder.initSTMSSession(stmsToken,userId,userName);
sessionService.persistSession(sessionStruct.getSid(), sessionStruct.getValues(), sessionStruct.getTenantId());
} else {
throw new BizException(BizExceptionEnum.UN_PERMISSION_STMS);
}
} else {
throw new BizException(BizExceptionEnum.UN_VALID_STMS_TOKEN);
}
} else {
//session续期
sessionService.persistSession(sessionStruct.getSid(), sessionStruct.getValues(), sessionStruct.getTenantId());
}
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
XyqbSessionContextHolder.releaseSession();
}
}
......@@ -26,7 +26,7 @@ public class TokenInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//所有开放出去的外部接口,都需要验证租户id和注册来源
//所有开放出去的外部接口,都需要验证租户id和注册来源
String tenantId = request.getHeader(Constants.X_AUTH_TENANT);
String registered_from = request.getHeader(Constants.X_AUTH_FROM);
if (StringUtils.isEmpty(tenantId)) {
......@@ -48,7 +48,9 @@ public class TokenInterceptor implements HandlerInterceptor {
} else {
//如果是排除的接口,同时sessionStruct为空,这时候初始化租户和来源字段
if (sessionStruct == null) {
XyqbSessionContextHolder.initXSession();
sessionStruct = XyqbSessionContextHolder.initXSession();
sessionService.persistSession(sessionStruct.getSid(), sessionStruct.getValues(), sessionStruct.getTenantId());
}
}
......
......@@ -28,6 +28,9 @@ public class SessionStruct implements Serializable {
private String scDeviceId;
private String terminal;
private String stmsUserId;
private String stmsUserName;
public void setAttribute(String key, String value) {
if (value == null) {
......
......@@ -2,11 +2,18 @@ package cn.quantgroup.xyqb.remote;
import cn.quantgroup.xyqb.model.OauthResult;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestParam;
@FeignClient(name = "stms", url = "${stms.https}")
public interface StmsRemoteService {
@PostMapping("/v2/oauth/currentuserinfo")
OauthResult checkToken(@RequestHeader("Access-Token") String accessToken);
@GetMapping(value = "/v2/oauth/permission")
OauthResult checkPermission(@RequestHeader("Access-Token") String accessToken,
@RequestHeader("Referer") String referer, @RequestParam("tenantId") String tenantId);
}
package cn.quantgroup.xyqb.service.session.impl;
import cn.quantgroup.xyqb.constant.enums.RecordType;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.constant.enums.RecordType;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserTag;
import cn.quantgroup.xyqb.event.UserLoginEvent;
......@@ -36,7 +36,6 @@ import java.util.concurrent.TimeUnit;
/**
* session创建和续期
*
*/
@Slf4j
@Service
......@@ -64,22 +63,22 @@ public class SessionServiceImpl implements ISessionService {
* @return
*/
@Override
public AuthBean createSession(User user, LoginProperties properties, int loginType,Integer tenantId) {
public AuthBean createSession(User user, LoginProperties properties, int loginType, Integer tenantId) {
//找到用户
//TODO: 使用userId
String sessionId = findSessionIdByUserIdLoginProperties(user.getId(), properties,tenantId);
String sessionId = findSessionIdByUserIdLoginProperties(user.getId(), properties, tenantId);
SessionStruct sessionStruct = null;
if (StringUtils.isNotEmpty(sessionId)) {
sessionStruct = findSessionBySessionId(sessionId,tenantId);
sessionStruct = findSessionBySessionId(sessionId, tenantId);
}
if (Objects.nonNull(sessionStruct) && Objects.nonNull(properties)) {
sessionStruct.setAttribute("channelId", String.valueOf(properties.getChannelId()));
sessionStruct.setAttribute("createdFrom", String.valueOf(properties.getCreatedFrom()));
sessionStruct.setAttribute("appChannel", String.valueOf(properties.getAppChannel()));
sessionStruct.getValues().setLoginProperties(properties);
persistSession(sessionStruct.getSid(), sessionStruct.getValues(),tenantId);
persistSession(sessionStruct.getSid(), sessionStruct.getValues(), tenantId);
} else {
sessionStruct = createSessionAndPersist(user, properties,tenantId);
sessionStruct = createSessionAndPersist(user, properties, tenantId);
}
String uuid = user.getUuid();
AuthBean authBean = new AuthBean();
......@@ -100,27 +99,27 @@ public class SessionServiceImpl implements ISessionService {
}
@Override
public SessionStruct createSessionAndPersist(User user, LoginProperties properties,Integer tenantId) {
public SessionStruct createSessionAndPersist(User user, LoginProperties properties, Integer tenantId) {
SessionStruct sessionStruct;
//获取sessionid
String sessionId = findSessionIdByUserIdLoginProperties(user.getId(), properties,tenantId);
String sessionId = findSessionIdByUserIdLoginProperties(user.getId(), properties, tenantId);
if (StringUtils.length(sessionId) > 0) {
sessionStruct = findSessionBySessionId(sessionId,tenantId);
sessionStruct = findSessionBySessionId(sessionId, tenantId);
if (sessionStruct == null) {
sessionStruct = newSession(user, properties);
} else {
sessionStruct.getValues().setLoginProperties(properties);
}
persistSession(sessionStruct.getSid(), sessionStruct.getValues(),tenantId);
persistSession(sessionStruct.getSid(), sessionStruct.getValues(), tenantId);
} else {
sessionStruct = newSession(user, properties);
persistSession(sessionStruct.getSid(), sessionStruct.getValues(),tenantId);
persistSession(sessionStruct.getSid(), sessionStruct.getValues(), tenantId);
}
return sessionStruct;
}
private String findSessionIdByUserIdLoginProperties(Long userId, LoginProperties properties,Integer tenantId) {
return stringRedisTemplate.opsForValue().get(generateLoginPropertiesKey(userId, properties,tenantId));
private String findSessionIdByUserIdLoginProperties(Long userId, LoginProperties properties, Integer tenantId) {
return stringRedisTemplate.opsForValue().get(generateLoginPropertiesKey(userId, properties, tenantId));
}
/**
......@@ -130,17 +129,17 @@ public class SessionServiceImpl implements ISessionService {
* @param properties baitiao/xyqb/vcc ... + 用户注册来源
* @return redisKey. 用来标识这个渠道的用户 Session 是否存在
*/
private String generateLoginPropertiesKey(Long userId, LoginProperties properties,Integer tenantId) {
private String generateLoginPropertiesKey(Long userId, LoginProperties properties, Integer tenantId) {
if (ObjectUtils.isEmpty(properties.getTenantId())) {
return Constants.Session.USER_SESSION_ID_CACHE + ":" + userId + ":" + properties.getMerchantName() + ":" + properties.getCreatedFrom();
}else if (properties.getTenantId().equals(0) || TenantUtil.TENANT_DEFAULT.equals(properties.getTenantId())) {
} else if (properties.getTenantId().equals(0) || TenantUtil.TENANT_DEFAULT.equals(properties.getTenantId())) {
return Constants.Session.USER_SESSION_ID_CACHE + ":" + userId + ":" + properties.getMerchantName() + ":" + properties.getCreatedFrom();
}else {
} else {
return Constants.Session.USER_SESSION_ID_CACHE + ":" + userId + ":" + properties.getMerchantName() + ":" + properties.getCreatedFrom() + ":" + properties.getTenantId();
}
}
private String findSessionValueBySessionId(String sessionId,Integer tenantId) {
private String findSessionValueBySessionId(String sessionId, Integer tenantId) {
String result = stringRedisTemplate.opsForValue().get(Constants.Session.USER_SESSION_CACHE + sessionId);
return StringUtils.defaultString(result, "");
}
......@@ -173,21 +172,26 @@ public class SessionServiceImpl implements ISessionService {
@Override
@UserBtRegisterFill
public void persistSession(String token, SessionValue sessionValue,Integer tenantId) {
persistSession(token, sessionValue, Constants.Session.SESSION_VALID_TIME,tenantId);
public void persistSession(String token, SessionValue sessionValue, Integer tenantId) {
persistSession(token, sessionValue, Constants.Session.SESSION_VALID_TIME, tenantId);
}
@Override
public void persistSession(String token, SessionValue sessionValue, Long time,Integer tenantId) {
public void persistSession(String token, SessionValue sessionValue, Long time, Integer tenantId) {
Timestamp current = new Timestamp(System.currentTimeMillis());
if (sessionValue == null) {
sessionValue = new SessionValue();
}
sessionValue.setLastAccessTime(current);
String json = JSON.toJSONString(sessionValue);
stringRedisTemplate.opsForValue().set(Constants.Session.USER_SESSION_CACHE + token, json,
time, TimeUnit.SECONDS);
String key = generateLoginPropertiesKey(sessionValue.getUser().getId(), sessionValue.getLoginProperties(),tenantId);
if(sessionValue.getUser()!=null){
String key = generateLoginPropertiesKey(sessionValue.getUser().getId(), sessionValue.getLoginProperties(), tenantId);
stringRedisTemplate.opsForValue().set(key, token, time, TimeUnit.SECONDS);
log.info("[Session生命期延续],token:{},有效期:[24Hour]", token);
setUserIdTokenKeys(sessionValue.getUser().getId(), key,tenantId);
setUserIdTokenKeys(sessionValue.getUser().getId(), key, tenantId);
}
}
/**
......@@ -196,9 +200,9 @@ public class SessionServiceImpl implements ISessionService {
* @param userId
* @param key
*/
private void setUserIdTokenKeys(long userId, String key,Integer tenantId) {
private void setUserIdTokenKeys(long userId, String key, Integer tenantId) {
if (0L != userId) {
String setKey = getUserSessionSetKey(userId,tenantId);
String setKey = getUserSessionSetKey(userId, tenantId);
try {
stringRedisTemplate.opsForSet().add(setKey, key);
stringRedisTemplate.expire(setKey, Constants.Session.SESSION_VALID_TIME, TimeUnit.SECONDS);
......@@ -209,8 +213,8 @@ public class SessionServiceImpl implements ISessionService {
}
}
private SessionStruct findSessionBySessionId(String sessionId,Integer tenantId) {
String sessionValue = findSessionValueBySessionId(sessionId,tenantId);
private SessionStruct findSessionBySessionId(String sessionId, Integer tenantId) {
String sessionValue = findSessionValueBySessionId(sessionId, tenantId);
if (StringUtils.isEmpty(sessionValue)) {
log.warn("[SessionServiceImpl][findSessionBySessionId] session data 未找到:sid:{}", sessionId);
return null;
......@@ -234,15 +238,15 @@ public class SessionServiceImpl implements ISessionService {
@Override
@CacheEvict(value = "userextinfocache", key = "'extinfo' + #userId", cacheManager = "cacheManager")
public void deleteByUserId(long userId,Integer tenantId) {
public void deleteByUserId(long userId, Integer tenantId) {
//1.删除session关联
String setKey = getUserSessionSetKey(userId,tenantId);
String setKey = getUserSessionSetKey(userId, tenantId);
Set useIdKeys = stringRedisTemplate.opsForSet().members(setKey);
if (!CollectionUtils.isEmpty(useIdKeys)) {
useIdKeys.forEach(key -> {
log.info("删除用户userId={}的缓存信息", userId);
String token = stringRedisTemplate.opsForValue().get(String.valueOf(key));
stringRedisTemplate.delete(getUserTokenKey(token,tenantId));
stringRedisTemplate.delete(getUserTokenKey(token, tenantId));
stringRedisTemplate.delete(String.valueOf(key));
});
//2.删除session缓存健
......@@ -250,7 +254,7 @@ public class SessionServiceImpl implements ISessionService {
}
}
private String getUserTokenKey(String token,Integer tenantId) {
private String getUserTokenKey(String token, Integer tenantId) {
return Constants.Session.USER_SESSION_CACHE + token;
}
......@@ -266,39 +270,39 @@ public class SessionServiceImpl implements ISessionService {
@CacheEvict(value = "userSpouseCache", key = "'spouse' + #user.id", cacheManager = "cacheManager"),
@CacheEvict(value = "btRegisterCache", key = "'userId' + #user.id", cacheManager = "cacheManager")})
@Override
public void deleteUserCatch(User user,Integer tenantId) {
public void deleteUserCatch(User user, Integer tenantId) {
}
@Override
public List<SessionStruct> findByUserId(long userId,Integer tenantId) {
public List<SessionStruct> findByUserId(long userId, Integer tenantId) {
List<SessionStruct> sessionStructList = new ArrayList<>();
String setKey = getUserSessionSetKey(userId,tenantId);
String setKey = getUserSessionSetKey(userId, tenantId);
Set<String> userIdKeys = stringRedisTemplate.opsForSet().members(setKey);
if (CollectionUtils.isEmpty(userIdKeys)) {
return sessionStructList;
}
for (String userIdKey : userIdKeys) {
String sessionId = stringRedisTemplate.opsForValue().get(userIdKey);
SessionStruct sessionStruct = findSessionBySessionId(sessionId,tenantId);
SessionStruct sessionStruct = findSessionBySessionId(sessionId, tenantId);
sessionStructList.add(sessionStruct);
}
return sessionStructList;
}
@Override
public void persistSession(List<SessionStruct> sessionStructList,Integer tenantId) {
public void persistSession(List<SessionStruct> sessionStructList, Integer tenantId) {
for (SessionStruct sessionStruct : sessionStructList) {
String sid = sessionStruct.getSid();
SessionValue values = sessionStruct.getValues();
persistSession(sid, values,tenantId);
persistSession(sid, values, tenantId);
}
}
@Override
public void deleteSession(String token,Integer tenantId) {
public void deleteSession(String token, Integer tenantId) {
SessionStruct sessionStruct = findSessionBySessionId(token,tenantId);
SessionStruct sessionStruct = findSessionBySessionId(token, tenantId);
if (null != sessionStruct) {
......@@ -308,7 +312,7 @@ public class SessionServiceImpl implements ISessionService {
User user = values.getUser();
String key = generateLoginPropertiesKey(user.getId(), values.getLoginProperties(),tenantId);
String key = generateLoginPropertiesKey(user.getId(), values.getLoginProperties(), tenantId);
stringRedisTemplate.delete(key);
......@@ -317,37 +321,36 @@ public class SessionServiceImpl implements ISessionService {
}
@Override
public void persistSessionExchange(String token, SessionValue sessionValue, long expire,Integer tenantId) {
public void persistSessionExchange(String token, SessionValue sessionValue, long expire, Integer tenantId) {
Timestamp current = new Timestamp(System.currentTimeMillis());
sessionValue.setLastAccessTime(current);
String json = JSON.toJSONString(sessionValue);
stringRedisTemplate.opsForValue().set(Constants.Session.USER_SESSION_CACHE + token, json,
Constants.Session.SESSION_VALID_TIME, TimeUnit.SECONDS);
String key = generateLoginPropertiesKey(sessionValue.getUser().getId(), sessionValue.getLoginProperties(),tenantId);
String key = generateLoginPropertiesKey(sessionValue.getUser().getId(), sessionValue.getLoginProperties(), tenantId);
stringRedisTemplate.opsForValue().set(key, token, expire, TimeUnit.SECONDS);
setUserIdTokenKeys(sessionValue.getUser().getId(), key,tenantId);
setUserIdTokenKeys(sessionValue.getUser().getId(), key, tenantId);
}
public void kdspDeleteSession(Long userId, LoginProperties loginProperties,Integer tenantId) {
public void kdspDeleteSession(Long userId, LoginProperties loginProperties, Integer tenantId) {
List<Long> createFromList = Arrays.asList(214L, 217L);
for (Long createFrom : createFromList) {
loginProperties.setCreatedFrom(createFrom);
String key = generateLoginPropertiesKey(userId, loginProperties,tenantId);
String key = generateLoginPropertiesKey(userId, loginProperties, tenantId);
String token = stringRedisTemplate.opsForValue().get(key);
deleteSession(token,tenantId);
deleteSession(token, tenantId);
}
}
/**
* 获取用户的会话缓存Set的Redis-Key
*
* @param userId - 用户主键
* @return
*/
private String getUserSessionSetKey(long userId,Integer tenantId) {
private String getUserSessionSetKey(long userId, Integer tenantId) {
return Constants.Session.USER_SESSION_KEY_SET + userId;
}
}
......@@ -37,9 +37,9 @@ public class XyqbSessionContextHolder {
return sessionStruct;
}
public static void initXSession() {
SessionStruct sessionStruct;
if (threadSession.get() == null) {
public static SessionStruct initXSession() {
SessionStruct sessionStruct =threadSession.get();
if (sessionStruct == null) {
sessionStruct = new SessionStruct();
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
......@@ -56,9 +56,43 @@ public class XyqbSessionContextHolder {
sessionStruct.setGeetestId(geetestId);
}
sessionStruct.setScDeviceId(request.getHeader("scDeviceId"));
sessionStruct.setTerminal( request.getHeader("terminal"));
sessionStruct.setTerminal(request.getHeader("terminal"));
threadSession.set(sessionStruct);
}else{
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
//如果是极验,那赋值
if (request.getHeader(Constants.X_BEHAVIOR_TYPE) != null && "1".equals(request.getHeader(Constants.X_BEHAVIOR_TYPE))) {
String geetestId = request.getHeader(Constants.X_BEHAVIOR_ID);
sessionStruct.setGeetestId(geetestId);
}
}
return sessionStruct;
}
public static SessionStruct initSTMSSession(String token,String userId, String userName) {
SessionStruct sessionStruct = threadSession.get();
if (sessionStruct == null) {
sessionStruct = new SessionStruct();
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String tenantId = request.getHeader(Constants.X_AUTH_TENANT);
String registered_from = request.getHeader(Constants.X_AUTH_FROM);
String ip = IpUtil.getRemoteIP(request);
sessionStruct.setTenantId(Integer.valueOf(tenantId));
sessionStruct.setRegisteredFrom(Long.valueOf(registered_from));
sessionStruct.setIp(ip);
sessionStruct.setScDeviceId(request.getHeader("scDeviceId"));
sessionStruct.setTerminal(request.getHeader("terminal"));
sessionStruct.setSid(token);
sessionStruct.setStmsUserId(userId);
sessionStruct.setStmsUserName(userName);
threadSession.set(sessionStruct);
} else {
sessionStruct.setStmsUserId(userId);
sessionStruct.setStmsUserName(userName);
}
return sessionStruct;
}
public static SessionStruct getXSessionFromRedis() {
......
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