基础型网站价格,网站设计中怎么做二级页面,购物网站二级店铺mvc,肥城网站建设费用写在前面
在项目开发过程中#xff0c;难免都要获取当前登录用户的信息。通常的做法#xff0c;都是开发一个获取用户信息的接口。
如果在本项目中#xff0c;多处都需要获取登录用户的信息#xff0c;难不成还要调用自己写的接口吗#xff1f;显然不用#xff01;
以…写在前面
在项目开发过程中难免都要获取当前登录用户的信息。通常的做法都是开发一个获取用户信息的接口。
如果在本项目中多处都需要获取登录用户的信息难不成还要调用自己写的接口吗显然不用
以往的项目经验里都是使用用户对应的Service获取今天使用自定义注解对其进行数据绑定从而获取登录用户信息。
步骤一编写自定义注解
先自定义一个用于绑定登录用户信息的注解且运行时有效。
代码如下
/*** 当前登录用户信息注解*/
Target({ElementType.PARAMETER})
Retention(RetentionPolicy.RUNTIME)
Documented
public interface CurrentUser{}步骤二自定义UserResolver
Spring boot封装了SpringMVC中的HandlerMethodArgumentResolver接口自定义UserResolver要实现对应的2个接口。
代码如下
/*** 当前登录用户Resolver*/
public class CurrentUserMethodArgumentResolver implements HandlerMethodArgumentResolver {Autowiredprivate UserService userService;Overridepublic boolean supportsParameter(MethodParameter methodParameter) {//判断方法参数是否带有CurrentUser注解且参数类型为User或其子类return methodParameter.hasParameterAnnotation(CurrentUser.class) User.class.isAssignableFrom(methodParameter.getParameterType());}Overridepublic Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception {//获取当前登录用户return userService.getCurrent();}}步骤三WebMvcConfig配置自定义解析器
新建一个webconfig 实现 WebMvcConfigurer 接口 需要重写 addArgumentResolvers 这个方法初始化我们创建的操作类。
代码如下
/*** 配置自定义解析器*/
Configuration
public class MvcConfig implements WebMvcConfigurer{Beanpublic CurrentUserMethodArgumentResolver currentUserMethodArgumentResolver() {return new CurrentUserMethodArgumentResolver();}Overridepublic void addArgumentResolvers(ListHandlerMethodArgumentResolver argumentResolvers) {argumentResolvers.add(currentUserMethodArgumentResolver());}
}步骤四编写代码测试
RequestMapping(value /getUser, method RequestMethod.GET)
public MapString, Object queryUser( CurrentUser UserInfoVO userInfo) {System.out.println(userInfo);
}小结
之所以能够自定义注解获取当前登录用户信息就是借助于HandlerMethodArgumentResolver来扩展自己的参数解析器。
在resolveArgument接口中编写对应获取登录用户信息的逻辑代码。举个栗子有的系统是从数据库中获取数据有的则把对应数据放在redis中。所以在这里从不同地方获取即可。 The end.