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); } }