123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- 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.module.web.util.IpUtil;
- import com.zanxiang.mybatis.entity.GameExt;
- 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.GameExtService;
- import com.zanxiang.sdk.service.UserTokenService;
- import lombok.extern.slf4j.Slf4j;
- 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;
- @Resource
- private GameExtService gameExtService;
- @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);
- }
- //是否强制验证登录状态
- boolean b = parameter.hasParameterAnnotation(ValidLogin.class);
- String token = request.getHeader("token");
- //需要登录, token不存在
- if (b && StringUtils.isEmpty(token)) {
- throw new CustomException(HttpStatusEnum.USER_NO_LOGIN);
- }
- //设备类型
- Integer deviceType = Integer.valueOf(request.getHeader("deviceType"));
- //前端传过来的是appId,不是真正的gameId
- GameExt gameExt = gameExtService.getByGameAppId(request.getHeader("gameId"));
- if (gameExt == null) {
- throw new CustomException(HttpStatusEnum.UNKNOWN_ERROR);
- }
- //构造用户信息
- UserData data = UserData.builder()
- .gameId(gameExt.getGameId())
- .ip(IpUtil.getRealIp(request))
- .deviceType(deviceType)
- .deviceSystem(request.getHeader("os"))
- .mac(request.getHeader("mac"))
- .imei(request.getHeader("imei"))
- .androidId(request.getHeader("androidId"))
- .channel(request.getHeader("channel"))
- .build();
- //不需要登录, 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());
- data.setToken(userTokenDTO.getToken());
- data.setExpireTime(userTokenDTO.getExpireTime());
- return data;
- }
- }
|