Commit 43b64f4c authored by 王亮's avatar 王亮

finished (geetest).

parent b0013bb1
......@@ -40,6 +40,12 @@ public interface Constants {
String X_BEHAVIOR_TYPE = "qg-behavior-type";
String X_BEHAVIOR_ID = "qg-behavior-id";
String X_BEHAVIOR_IMAGEVALUE = "qg-behavior-imageValue";
String X_BEHAVIOR_CHALLENGE = "qg-behavior-challenge";
String X_BEHAVIOR_VALIDATE = "qg-behavior-validate";
String X_BEHAVIOR_SECCODE = "qg-behavior-seccode";
String X_BEHAVIOR_IP="ip";
int VERIFICATION_LEN = 2;
int SMS_CODE_LEN_4 = 4;
int SMS_CODE_LEN_6 = 6;
......
......@@ -4,21 +4,28 @@ import cn.quantgroup.xyqb.model.ClientType;
import cn.quantgroup.xyqb.model.SettingType;
import lombok.Data;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.time.LocalDateTime;
@Data
public class BehaviorReq {
/**
* 1:极验,2: 量化派图形验证码
*/
@NotNull
private Integer type;
/**
* 手机号码
*/
@Size(min = 11,max = 20)
private String phone;
/**
* 0:h5,1:web,2:app
* @see ClientType
*/
@NotNull
private Integer clientType;
/**
......@@ -27,6 +34,14 @@ public class BehaviorReq {
*/
private Integer settingType;
/**
* initializeDt,前端传过来,页面初始化极验时间(营销使用)
*/
private LocalDateTime initializeDt;
/**
* 通过request直接取
*/
private String ip;
}
package cn.quantgroup.xyqb.event;
import cn.quantgroup.xyqb.entity.UserTag;
import cn.quantgroup.xyqb.repository.IUserTagRepository;
import cn.quantgroup.xyqb.service.captcha.IGeetestLogService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
/**
* user_tag表,用来监听
*/
@Component
public class GeeTestLoginEventListener implements ApplicationListener<UserLoginEvent> {
@Autowired
private IGeetestLogService geetestLogService;
/**
* 逻辑 每次登录发送UserLoginEvent,落user_tag表
* 如果没有就新增,如果有就更新
*
* @param userLoginEvent UserLoginEvent
*/
@Override
public void onApplicationEvent(UserLoginEvent userLoginEvent) {
if (StringUtils.isNotEmpty(userLoginEvent.getGeetestId()) && userLoginEvent.getUserTag()!=null) {
geetestLogService.updateByUidGeetestLog(Long.valueOf(userLoginEvent.getGeetestId()),userLoginEvent.getUserTag().getUserId());
}
}
}
package cn.quantgroup.xyqb.event;
import cn.quantgroup.xyqb.entity.UserTag;
import cn.quantgroup.xyqb.model.LoginBean;
import lombok.Builder;
import lombok.Data;
import lombok.Getter;
......@@ -17,6 +18,7 @@ import org.springframework.context.annotation.Configuration;
public class UserLoginEvent extends ApplicationEvent {
private UserTag userTag;
private String geetestId;
public UserLoginEvent(Object source) {
super(source);
......@@ -26,4 +28,9 @@ public class UserLoginEvent extends ApplicationEvent {
super(source);
this.userTag = userTag;
}
public UserLoginEvent(Object source, UserTag userTag, String geetestId) {
super(source);
this.userTag = userTag;
this.geetestId = geetestId;
}
}
......@@ -15,12 +15,13 @@ public enum BizExceptionEnum {
ERROR_PASSWORD("1004","用户名或者密码错误"),
// 验证码相关20开头
// 验证码相关 20 开头
FAIL_GENERATE_IMAGE("2001","生成图片失败"),
FAIL_VERIFY_CODE("2002","图形验证码错误"),
UN_EXIT_VERIFY_TYPE("2003","不存在的验证码方式"),
UN_EXIT_VERIFY_CODE("2004","验证模式下验证码参数不能为空");
UN_EXIT_VERIFY_CODE("2004","验证模式下验证码参数不能为空"),
EX_GET_VERIFY_CODE("2005","获取验证码失败"),
UN_EXIT_GEETEST_LOG("2006","极验记录不存在");
private final String businessCode;
......
......@@ -6,6 +6,7 @@ import cn.quantgroup.xyqb.exception.BizException;
import cn.quantgroup.xyqb.exception.BizExceptionEnum;
import cn.quantgroup.xyqb.service.v2.BehaviorContext;
import cn.quantgroup.xyqb.session.XyqbSessionContextHolder;
import cn.quantgroup.xyqb.util.IpUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
......@@ -24,43 +25,60 @@ public class BehaviorInterceptor implements HandlerInterceptor {
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
String type = request.getHeader(Constants.X_BEHAVIOR_TYPE);
if (StringUtils.isEmpty(type) || !StringUtils.isNumeric(type)) {
return true;
}
String id = request.getHeader(Constants.X_BEHAVIOR_ID);
if(StringUtils.isEmpty(id)){
throw new BizException(BizExceptionEnum.UN_EXIT_VERIFY_CODE);
}
Map<String, String> data = new HashMap<>();
data.put(Constants.X_BEHAVIOR_ID, id);
data.put(Constants.X_BEHAVIOR_IP,IpUtil.getRemoteIP(request));
ValidateBehavior validateBehavior = new ValidateBehavior();
switch (Integer.parseInt(type)) {
case 1:
String challenge = request.getHeader(Constants.X_BEHAVIOR_CHALLENGE);
String validate = request.getHeader(Constants.X_BEHAVIOR_VALIDATE);
String secCode = request.getHeader(Constants.X_BEHAVIOR_SECCODE);
if(StringUtils.isEmpty(challenge) || StringUtils.isEmpty(validate)||StringUtils.isEmpty(secCode)){
throw new BizException(BizExceptionEnum.UN_EXIT_VERIFY_CODE);
}
validateBehavior.setType(1);
data.put(Constants.X_BEHAVIOR_CHALLENGE, challenge);
data.put(Constants.X_BEHAVIOR_VALIDATE, validate);
data.put(Constants.X_BEHAVIOR_SECCODE, secCode);
//走极验逻辑
return false;
break;
case 2:
//走量化派图形验证逻辑
String id = request.getHeader(Constants.X_BEHAVIOR_ID);
String imageValue = request.getHeader(Constants.X_BEHAVIOR_IMAGEVALUE);
if (StringUtils.isEmpty(id) || StringUtils.isEmpty(imageValue)) {
if (StringUtils.isEmpty(imageValue)) {
throw new BizException(BizExceptionEnum.UN_EXIT_VERIFY_CODE);
}
ValidateBehavior validateBehavior = new ValidateBehavior();
validateBehavior.setType(2);
Map<String, String> data = new HashMap<>();
data.put("id", id);
data.put("imageValue", imageValue);
validateBehavior.setData(data);
behaviorContext.validate(validateBehavior);
data.put(Constants.X_BEHAVIOR_IMAGEVALUE, imageValue);
break;
default:
return true;
}
}
validateBehavior.setData(data);
return behaviorContext.validate(validateBehavior);
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
XyqbSessionContextHolder.releaseSession();
}
}
......@@ -16,10 +16,11 @@ public class BehaviorCodeBean {
private QtCode qtCode;
private GeetestCode geetestCode;
private String id;
@Data
@Builder
public static class QtCode {
private String imageId;
private String imageData;
}
......
......@@ -6,7 +6,7 @@ import java.util.Optional;
* 验证码验证类型
*
* @author renwc
* @date 2018-02-02
* @since 2018-02-02
*/
public enum ClientType {
APP("native"), H5("h5"), WEB("web");
......@@ -15,7 +15,7 @@ public enum ClientType {
this.alias = alias;
}
private String alias;
private final String alias;
public String getAlias() {
return this.alias;
......@@ -35,9 +35,9 @@ public enum ClientType {
public static ClientType valueByCode(Integer code) {
switch (code) {
case 0:
return H5;
case 1:
return H5;
case 2:
return WEB;
default:
return APP;
......
......@@ -4,7 +4,6 @@ import java.util.Optional;
/**
* 验证场景类型
*
*/
public enum SettingType {
PASSWD("账密"), SMSLOGIN("短验");
......@@ -13,7 +12,7 @@ public enum SettingType {
this.alias = alias;
}
private String alias;
private final String alias;
public String getAlias() {
return this.alias;
......@@ -21,22 +20,18 @@ public enum SettingType {
public static SettingType valueByName(String name) {
name = Optional.ofNullable(name).orElse("").toLowerCase();
switch (name) {
case "短验":
return SMSLOGIN;
default:
return PASSWD;
if ("短验".equals(name)) {
return SMSLOGIN;
}
return PASSWD;
}
public static SettingType valueByCode(Integer code) {
switch (code) {
case 1:
return SMSLOGIN;
default:
return PASSWD;
if (code != null && code == 1) {
return SMSLOGIN;
}
return PASSWD;
}
}
......@@ -18,10 +18,13 @@ public class SessionStruct implements Serializable {
private SessionValue values;
private long expire;
private Integer tenantId;
private Integer registeredFrom;
private Long registeredFrom;
private String ip;
//极验的记录id
private String geetestId;
public void setAttribute(String key, String value) {
if (value == null) {
value = "";
......
package cn.quantgroup.xyqb.service.captcha;
import cn.quantgroup.xyqb.entity.GeetestLogEntity;
import java.util.Map;
/**
......@@ -14,4 +16,6 @@ public interface IGeetestLogService {
void updateByUidGeetestLog(Long geetestLogId, Long id);
void executeTask();
GeetestLogEntity getById(Long id);
}
package cn.quantgroup.xyqb.service.captcha.impl;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.entity.GeetestLogEntity;
import cn.quantgroup.xyqb.model.ClientType;
import cn.quantgroup.xyqb.model.SettingType;
......@@ -8,10 +9,12 @@ import cn.quantgroup.xyqb.service.captcha.IGeetestLogService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;
......@@ -22,9 +25,11 @@ import java.util.Map;
@Service
@Slf4j
public class GeetestLogServiceImpl implements IGeetestLogService {
private final IGeetestLogRepository geetestLogRepository;
@Resource
private IGeetestLogRepository geetestLogRepository;
public GeetestLogServiceImpl(IGeetestLogRepository geetestLogRepository) {
this.geetestLogRepository = geetestLogRepository;
}
@Override
public Long saveGeetestLog(String phoneNo, String clientType, String settingType, Map<String, String> imgMap) {
......@@ -34,15 +39,26 @@ public class GeetestLogServiceImpl implements IGeetestLogService {
geetestLogEntity.setSetting(SettingType.valueByName(settingType).ordinal());
geetestLogEntity.setChallenge(imgMap.getOrDefault("reChallenge", ""));
geetestLogEntity.setCaptchaId(imgMap.getOrDefault("gt", ""));
if (imgMap.containsKey(Constants.QG_CAPTCHA_INITDT)) {
geetestLogEntity.setInitializeDt(Date.from(LocalDateTime.parse(imgMap.get(Constants.QG_CAPTCHA_INITDT)).toInstant(ZoneOffset.UTC)));
}
if (imgMap.containsKey(Constants.QG_CAPTCHA_REGISTERDT)) {
geetestLogEntity.setRegisterDt(Date.from(LocalDateTime.parse(imgMap.get(Constants.QG_CAPTCHA_REGISTERDT)).toInstant(ZoneOffset.UTC)));
}
if (imgMap.containsKey(Constants.QG_CAPTCHA_REGISTERREDT)) {
geetestLogEntity.setRegisterReDt(Date.from(LocalDateTime.parse(imgMap.get(Constants.QG_CAPTCHA_REGISTERREDT)).toInstant(ZoneOffset.UTC)));
}
geetestLogEntity = geetestLogRepository.saveAndFlush(geetestLogEntity);
return geetestLogEntity.getId();
}
@Override
@Transactional
public void updateGeetestLog(String geetestLogId, String initializeDt, String registerDt, String registerReDt, Map<String, Object> result) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
GeetestLogEntity geetestLogEntity = geetestLogRepository.getOne(Long.parseLong(geetestLogId));
GeetestLogEntity geetestLogEntity = geetestLogRepository.findOne(Long.parseLong(geetestLogId));
if (geetestLogEntity != null) {
if (StringUtils.isNotBlank(initializeDt) && StringUtils.isNotBlank(registerDt) && StringUtils.isNotBlank(registerReDt)) {
geetestLogEntity.setInitializeDt(simpleDateFormat.parse(initializeDt));
......@@ -81,11 +97,16 @@ public class GeetestLogServiceImpl implements IGeetestLogService {
dt = c.getTime();
log.info("执行删除超过180天的极验日志记录--{}", dt);
Timestamp ts=new Timestamp(dt.getTime());
Timestamp ts = new Timestamp(dt.getTime());
geetestLogRepository.deleteByCreatedAtIsBefore(ts);
} catch (Exception e) {
log.error("执行删除超过180天的极验即日记录--{}", e.getMessage());
}
}
@Override
public GeetestLogEntity getById(Long id) {
return geetestLogRepository.findOne(id);
}
}
......@@ -16,7 +16,7 @@ public class BehaviorContext {
private final Map<Integer,BehaviorStrategy> behaviorStrategyMap = new HashMap<>();
public BehaviorContext(List<LoginStrategy> loginStrategies, List<BehaviorStrategy> behaviorStrategies) {
public BehaviorContext(List<BehaviorStrategy> behaviorStrategies) {
behaviorStrategies.forEach(i->behaviorStrategyMap.put(i.getType(), i));
}
......
package cn.quantgroup.xyqb.service.v2;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.controller.req.v2.BehaviorReq;
import cn.quantgroup.xyqb.controller.req.v2.ValidateBehavior;
import cn.quantgroup.xyqb.entity.GeetestLogEntity;
import cn.quantgroup.xyqb.exception.BizException;
import cn.quantgroup.xyqb.exception.BizExceptionEnum;
import cn.quantgroup.xyqb.model.BehaviorCodeBean;
import cn.quantgroup.xyqb.model.ClientType;
import cn.quantgroup.xyqb.model.SettingType;
import cn.quantgroup.xyqb.service.captcha.IGeetestCaptchaService;
import cn.quantgroup.xyqb.service.captcha.IGeetestLogService;
import cn.quantgroup.xyqb.service.captcha.IQuantgroupCaptchaService;
import cn.quantgroup.xyqb.util.PasswordUtil;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.Locale;
import java.util.Map;
import java.util.UUID;
......@@ -18,8 +26,16 @@ import java.util.UUID;
*/
@Service
public class GeetestBehaviorStrategy implements BehaviorStrategy {
@Resource
private IGeetestCaptchaService geetestCaptchaService;
private final IGeetestCaptchaService geetestCaptchaService;
private final IGeetestLogService geetestLogService;
private final IQuantgroupCaptchaService quantgroupCaptchaService;
public GeetestBehaviorStrategy(IGeetestCaptchaService geetestCaptchaService, IGeetestLogService geetestLogService, IQuantgroupCaptchaService quantgroupCaptchaService) {
this.geetestCaptchaService = geetestCaptchaService;
this.geetestLogService = geetestLogService;
this.quantgroupCaptchaService = quantgroupCaptchaService;
}
@Override
public Integer getType() {
......@@ -28,7 +44,22 @@ public class GeetestBehaviorStrategy implements BehaviorStrategy {
@Override
public boolean validate(ValidateBehavior validateBehavior) {
return false;
GeetestLogEntity geetestLogEntity = geetestLogService.getById(Long.valueOf(validateBehavior.getData().get(Constants.X_BEHAVIOR_ID)));
if (geetestLogEntity == null) {
throw new BizException(BizExceptionEnum.UN_EXIT_GEETEST_LOG);
}
Map<String, Object> result;
String key = StringUtils.isNotBlank(geetestLogEntity.getPhoneNo()) ? geetestLogEntity.getPhoneNo().trim() : UUID.randomUUID().toString();
if (SettingType.PASSWD.getAlias().equals(SettingType.valueByCode(validateBehavior.getType()).getAlias())) {
result = geetestCaptchaService.validGeetestCaptchaPasswd(key, validateBehavior.getData().get(Constants.X_BEHAVIOR_IP), ClientType.valueByCode(geetestLogEntity.getDataSource()), validateBehavior.getData().get(Constants.X_BEHAVIOR_CHALLENGE), validateBehavior.getData().get(Constants.X_BEHAVIOR_VALIDATE), validateBehavior.getData().get(Constants.X_BEHAVIOR_SECCODE));
} else {
result = geetestCaptchaService.validGeetestCaptcha(key, validateBehavior.getData().get(Constants.X_BEHAVIOR_IP), ClientType.valueByCode(geetestLogEntity.getDataSource()) , validateBehavior.getData().get(Constants.X_BEHAVIOR_CHALLENGE), validateBehavior.getData().get(Constants.X_BEHAVIOR_VALIDATE), validateBehavior.getData().get(Constants.X_BEHAVIOR_SECCODE));
}
geetestLogService.updateGeetestLog(validateBehavior.getData().get(Constants.X_BEHAVIOR_ID), null, null, null, result);
return (boolean) result.get("valid");
}
......@@ -37,17 +68,35 @@ public class GeetestBehaviorStrategy implements BehaviorStrategy {
BehaviorCodeBean behaviorCodeBean = new BehaviorCodeBean();
String key = StringUtils.isNotBlank(behaviorReq.getPhone()) ? behaviorReq.getPhone().trim() : UUID.randomUUID().toString();
// key指纹
String registerDt = LocalDateTime.now().toString();
Map<String, String> imgMap = geetestCaptchaService.fetchGeetestCaptcha(PasswordUtil.MD5(key), behaviorReq.getIp(), ClientType.valueByCode(behaviorReq.getClientType()));
if (imgMap.containsKey("success") && "1".equals(imgMap.get("success"))) {
behaviorCodeBean.setType(1);
behaviorCodeBean.setGeetestCode(BehaviorCodeBean.GeetestCode.builder().gt(imgMap.get("gt"))
.challenge(imgMap.get("challenge"))
.reChallenge(imgMap.get("reChallenge")).
.reChallenge(imgMap.get("reChallenge")
).offline(false).newCaptcha(true).
build());
String registerReDt = LocalDateTime.now().toString();
imgMap.put(Constants.QG_CAPTCHA_INITDT,behaviorReq.getInitializeDt().toString());
imgMap.put(Constants.QG_CAPTCHA_REGISTERDT,registerDt);
imgMap.put(Constants.QG_CAPTCHA_REGISTERREDT,registerReDt);
Long geetestLogId = geetestLogService.saveGeetestLog(behaviorReq.getPhone(), ClientType.valueByCode(behaviorReq.getClientType()).getAlias(), SettingType.valueByCode(behaviorReq.getSettingType()).getAlias(), imgMap);
behaviorCodeBean.setId(String.valueOf(geetestLogId));
} else {
//降级方案
behaviorCodeBean.setType(2);
imgMap = quantgroupCaptchaService.fetchQuantgroupCaptcha(Locale.CHINA);
if (imgMap != null) {
behaviorCodeBean.setQtCode(BehaviorCodeBean.QtCode.builder()
.imageData(imgMap.get("image")).build());
behaviorCodeBean.setId(imgMap.get("imageId"));
} else {
throw new BizException(BizExceptionEnum.EX_GET_VERIFY_CODE);
}
}
return behaviorCodeBean;
}
......
package cn.quantgroup.xyqb.service.v2;
import cn.quantgroup.xyqb.controller.req.v2.LoginReq;
import cn.quantgroup.xyqb.entity.UserTag;
import cn.quantgroup.xyqb.event.UserLoginEvent;
import cn.quantgroup.xyqb.model.LoginBean;
import cn.quantgroup.xyqb.model.session.SessionStruct;
import cn.quantgroup.xyqb.model.v2.login.BaseLoginParam;
import cn.quantgroup.xyqb.session.XyqbSessionContextHolder;
import org.apache.commons.lang3.StringUtils;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service;
import java.util.HashMap;
......@@ -12,9 +18,10 @@ import java.util.Map;
@Service
public class LoginContext {
private final Map<Integer, LoginStrategy> loginStrategyMap = new HashMap<>();
private final ApplicationEventPublisher applicationEventPublisher;
public LoginContext(List<LoginStrategy> loginStrategies) {
public LoginContext(List<LoginStrategy> loginStrategies, ApplicationEventPublisher applicationEventPublisher) {
this.applicationEventPublisher = applicationEventPublisher;
loginStrategies.forEach(i -> loginStrategyMap.put(i.getType(), i));
}
......@@ -25,8 +32,20 @@ public class LoginContext {
//第二步、执行登录操作
LoginBean loginBean = loginStrategy.login(loginParam);
//第三步、发送登录成功消息
SessionStruct sessionStruct = XyqbSessionContextHolder.getXSession();
UserTag userTag = UserTag.builder().userId(loginBean.getUserId()).registeredFrom(sessionStruct.getRegisteredFrom()).tenantId(sessionStruct.getTenantId()).build();
String geetestId = null;
if (StringUtils.isNotEmpty(sessionStruct.getGeetestId())) {
geetestId = sessionStruct.getGeetestId();
}
UserLoginEvent userLoginEvent = new UserLoginEvent(this, userTag, geetestId);
applicationEventPublisher.publishEvent(userLoginEvent);
return loginStrategy.login(loginParam);
return loginBean;
}
}
package cn.quantgroup.xyqb.service.v2;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.controller.req.v2.BehaviorReq;
import cn.quantgroup.xyqb.controller.req.v2.ValidateBehavior;
import cn.quantgroup.xyqb.exception.BizException;
......@@ -40,7 +41,7 @@ public class QuantGroupBehaviorStrategy implements BehaviorStrategy {
@Override
public boolean validate(ValidateBehavior validateBehavior) {
boolean result = quantgroupCaptchaService.validQuantgroupCaptcha(validateBehavior.getData().get("id"),validateBehavior.getData().get("imageValue"));
boolean result = quantgroupCaptchaService.validQuantgroupCaptcha(validateBehavior.getData().get("id"),validateBehavior.getData().get(Constants.X_BEHAVIOR_IMAGEVALUE));
if(result){
return true;
}else{
......@@ -56,7 +57,8 @@ public class QuantGroupBehaviorStrategy implements BehaviorStrategy {
if (challenge == null) {
throw new BizException(BizExceptionEnum.FAIL_GENERATE_IMAGE);
}
behaviorCodeBean.setQtCode(BehaviorCodeBean.QtCode.builder().imageId(challenge.get("imageId")).imageData(challenge.get("image")).build());
behaviorCodeBean.setQtCode(BehaviorCodeBean.QtCode.builder().imageData(challenge.get("image")).build());
behaviorCodeBean.setId(challenge.get("imageId"));
return behaviorCodeBean;
}
}
......@@ -37,22 +37,27 @@ public class XyqbSessionContextHolder {
return sessionStruct;
}
public static SessionStruct initXSession() {
public static void initXSession() {
SessionStruct sessionStruct;
if (threadSession.get() != null) {
sessionStruct = threadSession.get();
} else {
if (threadSession.get() == 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(Integer.valueOf(registered_from));
sessionStruct.setRegisteredFrom(Long.valueOf(registered_from));
sessionStruct.setIp(ip);
//如果是极验,那赋值
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);
}
threadSession.set(sessionStruct);
}
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