Commit a156be30 authored by 技术部-任文超's avatar 技术部-任文超

提交自测

parent 52bfbcf2
...@@ -5,6 +5,7 @@ import cn.quantgroup.xyqb.entity.User; ...@@ -5,6 +5,7 @@ import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.model.JsonResult; import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.model.session.SessionStruct; import cn.quantgroup.xyqb.model.session.SessionStruct;
import cn.quantgroup.xyqb.session.XyqbSessionContextHolder; import cn.quantgroup.xyqb.session.XyqbSessionContextHolder;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Around;
...@@ -20,10 +21,7 @@ import org.springframework.web.context.request.RequestContextHolder; ...@@ -20,10 +21,7 @@ import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes; import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration; import java.util.*;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
/** /**
* 免密访问校验切面 * 免密访问校验切面
...@@ -57,50 +55,74 @@ public class PasswordFreeAccessValidatorValidateAdvisor { ...@@ -57,50 +55,74 @@ public class PasswordFreeAccessValidatorValidateAdvisor {
*/ */
@Around("passwordFreeAccess()") @Around("passwordFreeAccess()")
private Object checkToken(ProceedingJoinPoint pjp) throws Throwable { private Object checkToken(ProceedingJoinPoint pjp) throws Throwable {
boolean valid = tokenValid(); HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
boolean valid = tokenValid(request) || ipValid(request);
if (valid) { if (valid) {
return pjp.proceed(); return pjp.proceed();
} }
return JsonResult.buildErrorStateResult("操作失败,请重新提交请求", ""); return JsonResult.buildErrorStateResult("拒绝访问", "");
} }
/** /**
* 校验免密访问 * 校验免密访问
* 规则:token 与 身份标记(phoneNo、userId匹配)
* @return True or False * @return True or False
*/ */
private boolean tokenValid() { private boolean tokenValid(HttpServletRequest request) {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); Objects.requireNonNull(request, "无效请求");
Set<String> paramKeys = request.getParameterMap().keySet(); Set<String> paramKeys = request.getParameterMap().keySet();
if(!paramKeys.contains(PHONE_NO) && !paramKeys.contains(USER_ID)){ if(!paramKeys.contains(PHONE_NO) && !paramKeys.contains(USER_ID)){
LOGGER.info("缺少参数信息,请重新请求, paramKeys={}, clientIp={}", paramKeys, request.getRemoteAddr()); LOGGER.info("非法请求 - 缺少参数, paramKeys={}, clientIp={}", paramKeys, request.getRemoteAddr());
return false; return false;
} }
// 当前请求的phoneNo/userId // 当前请求的phoneNo/userId
String phoneNo = request.getParameter(PHONE_NO); String phoneNo = request.getParameter(PHONE_NO);
String userId = request.getParameter(USER_ID); String userId = request.getParameter(USER_ID);
if(StringUtils.isBlank(phoneNo) && StringUtils.isBlank(userId)){ if(StringUtils.isBlank(phoneNo) && StringUtils.isBlank(userId)){
LOGGER.info("缺少参数信息,请重新请求, phoneNo={}, userId={}, clientIp={}", phoneNo, userId, request.getRemoteAddr()); LOGGER.info("非法请求 - 缺少参数, phoneNo={}, userId={}, clientIp={}", phoneNo, userId, request.getRemoteAddr());
return false; return false;
} }
// 当前请求的Token // 当前请求的Token
String token = request.getHeader(Constants.X_AUTH_TOKEN); String token = request.getHeader(Constants.X_AUTH_TOKEN);
if (Objects.isNull(token) || token.length() != 36) { if (Objects.isNull(token) || token.length() != 36) {
LOGGER.info("非法请求 - 无效token, token={}, phoneNo={}, userId={}, clientIp={}", token, phoneNo, userId, request.getRemoteAddr());
return false; return false;
} }
// 当前session // 当前session
SessionStruct session = XyqbSessionContextHolder.getXSessionFromRedis(token); SessionStruct session = XyqbSessionContextHolder.getXSessionFromRedis(token);
if (Objects.isNull(session) || Objects.isNull(session.getValues()) || Objects.isNull(session.getValues().getUser())){ if (Objects.isNull(session) || Objects.isNull(session.getValues()) || Objects.isNull(session.getValues().getUser())){
LOGGER.info("非法请求 - 未登录, token={}, phoneNo={}, userId={}, clientIp={}", token, phoneNo, userId, request.getRemoteAddr());
return false; return false;
} }
// 当前用户 // 当前用户
User user = session.getValues().getUser(); User user = session.getValues().getUser();
if(Objects.isNull(user.getId()) && StringUtils.isBlank(user.getPhoneNo())){ if(Objects.isNull(user.getId()) && StringUtils.isBlank(user.getPhoneNo())){
LOGGER.info("非法请求 - 未登录, token={}, phoneNo={}, userId={}, clientIp={}", token, phoneNo, userId, request.getRemoteAddr());
return false; return false;
} }
// 校对用户信息是否匹配 // 校对用户信息是否匹配
boolean valid = Objects.equals(userId, user.getId()) || Objects.equals(phoneNo, user.getPhoneNo()); boolean valid = (Objects.nonNull(user.getId()) && Objects.equals(userId, user.getId().toString()));
valid = valid || (StringUtils.isNotBlank(phoneNo) && Objects.equals(phoneNo, user.getPhoneNo()));
if(!valid) {
LOGGER.info("非法请求 - 身份不匹配, token={}, phoneNo=({},{}), userId=({},{}), clientIp={}", token, phoneNo, user.getPhoneNo(), userId, user.getId(), request.getRemoteAddr());
}
return valid;
}
/**
* 校验免密访问
* 规则:来访IP与白名单匹配
* @return True or False
*/
private boolean ipValid(HttpServletRequest request) {
Objects.requireNonNull(request, "无效请求");
String remoteAddr = request.getRemoteAddr();
Set<String> whiteAddr = Collections.emptySet();
// Todo 配置白名单
// 校对来访IP是否与白名单匹配
boolean valid = StringUtils.isNotBlank(remoteAddr) && whiteAddr.contains(remoteAddr);
if(!valid) { if(!valid) {
LOGGER.info("非法请求, token={}, phoneNo=({},{}), userId=({},{}), clientIp={}", token, phoneNo, user.getPhoneNo(), userId, user.getId(), request.getRemoteAddr()); LOGGER.info("非法请求 - 未授权访问, clientIp={}", request.getRemoteAddr());
} }
return valid; return valid;
} }
......
package cn.quantgroup.xyqb.controller.external.user; package cn.quantgroup.xyqb.controller.external.user;
import cn.quantgroup.user.enums.Relation; import cn.quantgroup.user.enums.Relation;
import cn.quantgroup.xyqb.aspect.limit.PasswordFreeAccessValidator;
import cn.quantgroup.xyqb.aspect.logcaller.LogHttpCaller; import cn.quantgroup.xyqb.aspect.logcaller.LogHttpCaller;
import cn.quantgroup.xyqb.controller.IBaseController; import cn.quantgroup.xyqb.controller.IBaseController;
import cn.quantgroup.xyqb.entity.*; import cn.quantgroup.xyqb.entity.*;
...@@ -519,6 +520,7 @@ public class InnerController implements IBaseController { ...@@ -519,6 +520,7 @@ public class InnerController implements IBaseController {
return JsonResult.buildSuccessResult(null, UserExtInfoRet.getUserExtInfoRet(info)); return JsonResult.buildSuccessResult(null, UserExtInfoRet.getUserExtInfoRet(info));
} }
// Todo @PasswordFreeAccessValidator
@RequestMapping("/user_detail/search_list") @RequestMapping("/user_detail/search_list")
@LogHttpCaller @LogHttpCaller
public JsonResult searchUserDetailList(String name, String phoneNo, String idNo) { public JsonResult searchUserDetailList(String name, String phoneNo, String idNo) {
...@@ -572,6 +574,7 @@ public class InnerController implements IBaseController { ...@@ -572,6 +574,7 @@ public class InnerController implements IBaseController {
return JsonResult.buildSuccessResult("success", wechatUserInfo.getOpenId()); return JsonResult.buildSuccessResult("success", wechatUserInfo.getOpenId());
} }
// Todo @PasswordFreeAccessValidator
@RequestMapping("/user-association/search/phone") @RequestMapping("/user-association/search/phone")
@LogHttpCaller @LogHttpCaller
public JsonResult findUserAssociationByPhone(String phoneNo) { public JsonResult findUserAssociationByPhone(String phoneNo) {
...@@ -624,6 +627,7 @@ public class InnerController implements IBaseController { ...@@ -624,6 +627,7 @@ public class InnerController implements IBaseController {
return JsonResult.buildSuccessResult("", bean); return JsonResult.buildSuccessResult("", bean);
} }
@RequestMapping("/user-association/search/uid") @RequestMapping("/user-association/search/uid")
@LogHttpCaller @LogHttpCaller
public JsonResult findUserAssociationByUid(Long uid) { public JsonResult findUserAssociationByUid(Long uid) {
......
package cn.quantgroup.xyqb.controller.external.user.center; package cn.quantgroup.xyqb.controller.external.user.center;
import cn.quantgroup.xyqb.Constants; import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.aspect.limit.PasswordFreeAccessValidator;
import cn.quantgroup.xyqb.entity.*; import cn.quantgroup.xyqb.entity.*;
//import cn.quantgroup.xyqb.entity.enumerate.EducationEnum; //import cn.quantgroup.xyqb.entity.enumerate.EducationEnum;
//import cn.quantgroup.xyqb.entity.enumerate.IncomeRangeEnum; //import cn.quantgroup.xyqb.entity.enumerate.IncomeRangeEnum;
...@@ -55,6 +56,7 @@ public class UserCenterController { ...@@ -55,6 +56,7 @@ public class UserCenterController {
* @param phoneNo * @param phoneNo
* @return * @return
*/ */
@PasswordFreeAccessValidator
@RequestMapping("/index") @RequestMapping("/index")
public JsonResult userCenterIndex(String phoneNo) { public JsonResult userCenterIndex(String phoneNo) {
Long userId = queryUserId(phoneNo); Long userId = queryUserId(phoneNo);
...@@ -84,7 +86,7 @@ public class UserCenterController { ...@@ -84,7 +86,7 @@ public class UserCenterController {
*/ */
@RequestMapping("/save/avatar") @RequestMapping("/save/avatar")
public JsonResult SaveUserAvatarAddr(String phoneNo, String avatarUrl) { public JsonResult SaveUserAvatarAddr(String phoneNo, String avatarUrl) {
if(StringUtils.isEmpty(avatarUrl) || StringUtils.isEmpty(phoneNo)) { if(StringUtils.isBlank(avatarUrl) || StringUtils.isBlank(phoneNo)) {
LOGGER.error("参数不合法:avatarUrl:{}, phoneNo:{}", avatarUrl, phoneNo); LOGGER.error("参数不合法:avatarUrl:{}, phoneNo:{}", avatarUrl, phoneNo);
return JsonResult.buildErrorStateResult("参数不合法", null); return JsonResult.buildErrorStateResult("参数不合法", null);
} }
...@@ -190,9 +192,10 @@ public class UserCenterController { ...@@ -190,9 +192,10 @@ public class UserCenterController {
* @param phoneNo * @param phoneNo
* @return * @return
*/ */
@PasswordFreeAccessValidator
@RequestMapping("/personalData") @RequestMapping("/personalData")
public JsonResult personalData(String phoneNo) { public JsonResult personalData(String phoneNo) {
if(StringUtils.isEmpty(phoneNo)) { if(StringUtils.isBlank(phoneNo)) {
LOGGER.error("手机号为空,phoneNo:{}", phoneNo); LOGGER.error("手机号为空,phoneNo:{}", phoneNo);
return JsonResult.buildErrorStateResult("参数不合法", null); return JsonResult.buildErrorStateResult("参数不合法", null);
} }
......
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