springboot 参数注解 注入参数
2021-01-28 04:14
标签:view contain 添加 The 应用信息 autowired 获取 bind 应用 说明 我们在 使用spring mvc 的时候会使用这样的注解 @ResponseBody 这样,spring mvc 会将 客户端传来的数据,自动构建成 相应类型的对象。 有些情况下我们 获取当前登录人 ,我们也可以使用注解参数。 比如 我们写这样的一个方法: public void getUser(@LoginUser User user){ } 添加一个注解类 增加一个参数解析类 这个代码会从请求上下文获取数据并构建上下文用户对象。 在 mvc 配置中增加这个参数解析类。 这样就可以就可以在参数中直接使用以下代码获取上下文用户了。 public void getUser(@LoginUser User user){ } springboot 参数注解 注入参数 标签:view contain 添加 The 应用信息 autowired 获取 bind 应用 原文地址:https://www.cnblogs.com/yg_zhang/p/12841300.html什么时注解参数
实现代码
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface LoginUser {
/**
* 是否查询SysUser对象所有信息,true则通过rpc接口查询
*/
boolean isFull() default false;
}
public class TokenArgumentResolver implements HandlerMethodArgumentResolver {
private RemoteUserService userService;
public TokenArgumentResolver(RemoteUserService userService) {
this.userService = userService;
}
/**
* 入参筛选
*
* @param methodParameter 参数集合
* @return 格式化后的参数
*/
@Override
public boolean supportsParameter(MethodParameter methodParameter) {
return methodParameter.hasParameterAnnotation(LoginUser.class) &&
methodParameter.getParameterType().equals(JPaasUser.class);
}
/**
* @param methodParameter 入参集合
* @param modelAndViewContainer model 和 view
* @param nativeWebRequest web相关
* @param webDataBinderFactory 入参解析
* @return 包装对象
*/
@Override
public Object resolveArgument(MethodParameter methodParameter,
ModelAndViewContainer modelAndViewContainer,
NativeWebRequest nativeWebRequest,
WebDataBinderFactory webDataBinderFactory) {
LoginUser loginUser = methodParameter.getParameterAnnotation(LoginUser.class);
boolean isFull = loginUser.isFull();
HttpServletRequest request = nativeWebRequest.getNativeRequest(HttpServletRequest.class);
String userId = request.getHeader(SecurityConstants.USER_ID_HEADER);
String username = request.getHeader(SecurityConstants.USER_HEADER);
String roles = request.getHeader(SecurityConstants.ROLE_HEADER);
if (StrUtil.isBlank(username)) {
log.warn("resolveArgument error username is empty");
return null;
}
User user;
if (isFull) {
user = userService.selectByUsername(username);
} else {
user = new User();
user.setUserId(userId);
user.setAccount(username);
}
return user;
}
}
public class DefaultWebMvcConfig extends WebMvcConfigurationSupport {
@Lazy
@Autowired
private RemoteUserService userService;
/**
* Token参数解析
*
* @param argumentResolvers 解析类
*/
@Override
public void addArgumentResolvers(List
文章标题:springboot 参数注解 注入参数
文章链接:http://soscw.com/index.php/essay/48060.html