package com.panzhihua.service_equipment.resolvers;
|
|
import com.panzhihua.common.model.dtos.equipment.UnionUserDto;
|
import com.panzhihua.common.utlis.Constant;
|
import com.panzhihua.service_equipment.annotation.CurrentUser;
|
import com.panzhihua.service_equipment.service.UnionUserService;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.context.annotation.Lazy;
|
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;
|
|
/**
|
* 增加方法注入,将含有CurrentUser注解的方法参数注入当前登录用户
|
*/
|
@Component
|
public class CurrentUserMethodArgumentResolver implements HandlerMethodArgumentResolver {
|
|
@Lazy
|
@Autowired
|
private UnionUserService userService;
|
|
// ComEquipmentUnionUserFeign feignUserService = ComEquipmentUnionUserFeign.getBean(ComEquipmentUnionUserFeign.class);
|
|
|
@Override
|
public boolean supportsParameter(MethodParameter parameter) {
|
//如果参数类型是User并且有CurrentUser注解则支持
|
if (parameter.getParameterType().isAssignableFrom(UnionUserDto.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) {
|
//从数据库中查询并返回
|
UnionUserDto sysUser=userService.selectById(currentUserId);
|
if(sysUser!=null)
|
{
|
return sysUser;
|
}
|
|
}
|
return null;
|
// throw new MissingServletRequestPartException(Constant.CURRENT_USER_ID);
|
}
|
}
|