package com.dg.core.resolvers;
|
|
import com.dg.core.Constant;
|
import com.dg.core.annotation.CurrentUser;
|
import com.dg.core.db.gen.entity.HuaChengSysUser;
|
import com.dg.core.db.gen.entity.SysUser;
|
import com.dg.core.service.IHuaChengSysUserService;
|
import com.dg.core.service.ISysUserService;
|
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.context.request.RequestAttributes;
|
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
|
import org.springframework.web.method.support.ModelAndViewContainer;
|
import org.springframework.web.multipart.support.MissingServletRequestPartException;
|
|
import java.util.List;
|
|
/**
|
* 增加方法注入,将含有CurrentUser注解的方法参数注入当前登录用户
|
*/
|
@Component
|
public class CurrentUserMethodArgumentResolver implements HandlerMethodArgumentResolver {
|
|
@Autowired
|
private ISysUserService userService;
|
|
/**
|
* 花城e+用户接口
|
*/
|
@Autowired
|
IHuaChengSysUserService iHuaChengSysUserService;
|
|
@Override
|
public boolean supportsParameter(MethodParameter parameter) {
|
//如果参数类型是User并且有CurrentUser注解则支持
|
if (parameter.getParameterType().isAssignableFrom(SysUser.class) &&
|
parameter.hasParameterAnnotation(CurrentUser.class)) {
|
return true;
|
}
|
return false;
|
}
|
|
@Override
|
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
|
//取出鉴权时存入的登录用户Id
|
Long currentUserId = (Long) webRequest.getAttribute(Constant.CURRENT_USER_ID, RequestAttributes.SCOPE_REQUEST);
|
if (currentUserId != null) {
|
//从数据库中查询并返回
|
SysUser sysUser=userService.selectData(currentUserId+"",null,null);
|
if(sysUser!=null)
|
{
|
return sysUser;
|
}
|
|
List<HuaChengSysUser> list=iHuaChengSysUserService.selectData(currentUserId+"","","");
|
HuaChengSysUser huaChengSysUser=null;
|
|
if(list!=null || list.size()>0 )
|
{
|
huaChengSysUser=list.get(0);
|
}
|
|
if(huaChengSysUser!=null)
|
{
|
sysUser=userService.selectData(null,huaChengSysUser.getPhone(),null);
|
if(sysUser!=null)
|
{
|
return sysUser;
|
}
|
}
|
}
|
return null;
|
// throw new MissingServletRequestPartException(Constant.CURRENT_USER_ID);
|
}
|
}
|