123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- package com.zanxiang.sdk.adapter;
- import com.zanxiang.common.enums.HttpStatusEnum;
- import com.zanxiang.common.exception.CustomException;
- import com.zanxiang.common.utils.StringUtils;
- import com.zanxiang.sdk.annotation.ValidLogin;
- import com.zanxiang.sdk.domain.dto.UserTokenDTO;
- import com.zanxiang.sdk.domain.params.UserData;
- import com.zanxiang.sdk.service.UserTokenService;
- import com.zanxiang.sdk.util.DeviceCheckUtil;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.logging.log4j.util.Strings;
- import org.springframework.core.MethodParameter;
- import org.springframework.stereotype.Component;
- import org.springframework.stereotype.Service;
- import org.springframework.web.bind.support.WebDataBinderFactory;
- import org.springframework.web.context.request.NativeWebRequest;
- import org.springframework.web.method.support.HandlerMethodArgumentResolver;
- import org.springframework.web.method.support.ModelAndViewContainer;
- import javax.annotation.Resource;
- import javax.servlet.http.HttpServletRequest;
- /**
- * @author : lingfeng
- * @time : 2022-09-28
- * @description : 参数解析器
- */
- @Component
- @Service
- @Slf4j
- public class ArgumentAdapter implements HandlerMethodArgumentResolver {
- @Resource
- private UserTokenService userTokenService;
- @Override
- public boolean supportsParameter(MethodParameter parameter) {
- return parameter.getParameterType().equals(UserData.class);
- }
- @Override
- public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) {
- HttpServletRequest request = webRequest.getNativeRequest(HttpServletRequest.class);
- if (request == null) {
- throw new CustomException(HttpStatusEnum.UNKNOWN_ERROR);
- }
- //游戏id
- String gameId = request.getHeader("gameId");
- //是否强制验证登录状态
- boolean b = parameter.hasParameterAnnotation(ValidLogin.class);
- String token = request.getHeader("token");
- //需要登录, token不存在
- if (b && StringUtils.isEmpty(token)) {
- throw new CustomException(HttpStatusEnum.USER_NO_LOGIN);
- }
- //请求头处理
- String userAgent = request.getHeader("user-agent");
- Integer deviceType = DeviceCheckUtil.getType(userAgent);
- UserData data = new UserData();
- data.setDeviceType(deviceType);
- data.setDeviceSystem(DeviceCheckUtil.getDeviceSystem(userAgent));
- if (Strings.isNotBlank(gameId)) {
- data.setGameId(Long.valueOf(gameId));
- }
- //不需要登录, token不存在
- if (StringUtils.isEmpty(token)) {
- return data;
- }
- UserTokenDTO userTokenDTO = userTokenService.getTokenInfoByTokenDevice(token, deviceType);
- if (userTokenDTO == null) {
- if (b) {
- throw new CustomException(HttpStatusEnum.USER_NO_LOGIN);
- }
- return data;
- }
- if (b && userTokenDTO.getUserId() == null) {
- throw new CustomException(HttpStatusEnum.USER_NO_LOGIN);
- }
- data.setUserId(userTokenDTO.getUserId());
- log.info("UserData:{}", data);
- return data;
- }
- }
|