日照智慧社区接口服务
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

66 lines
2.4 KiB

/**
* Copyright (c) 2018 人人开源 All rights reserved.
* <p>
* https://www.renren.io
* <p>
* 版权所有,侵权必究!
*/
package com.epmet.resolver;
import com.alibaba.fastjson.JSON;
import com.epmet.common.token.dto.TokenDto;
import com.epmet.common.token.util.CpUserDetailRedis;
import com.epmet.commons.tools.annotation.LoginUser;
import com.epmet.commons.tools.constant.Constant;
import com.epmet.commons.tools.exception.RenException;
import com.epmet.exception.ModuleErrorCode;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.MethodParameter;
import org.springframework.stereotype.Component;
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;
/**
* 有@LoginUser注解的方法参数,注入当前登录用户
*
* @author Mark sunlightcs@gmail.com
*/
@Component
public class LoginUserHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {
private Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private CpUserDetailRedis cpUserDetailRedis;
public LoginUserHandlerMethodArgumentResolver(){
}
@Override
public boolean supportsParameter(MethodParameter parameter) {
logger.info("enter supportsParameter ");
return parameter.getParameterType().isAssignableFrom(TokenDto.class) && parameter.hasParameterAnnotation(LoginUser.class);
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer container,
NativeWebRequest request, WebDataBinderFactory factory) throws Exception {
//app-client-userId
String redisKey = request.getHeader(Constant.APP_USER_KEY);
if (StringUtils.isEmpty(redisKey)) {
throw new RenException(ModuleErrorCode.TOKEN_INVALID);
}
String[] keyArray=redisKey.split("-");
String app=keyArray[0];
String client=keyArray[1];
String userId=keyArray[2];
TokenDto tokenDto = cpUserDetailRedis.get(app,client,userId);
logger.info("resolveArgument TokenDto:"+ JSON.toJSONString(tokenDto));
return tokenDto;
}
}