@RequestMapping("/test1") public String test1(@UserId Long userId, @LoginedUser User user) { return String.format("test1,userId=%s , User对象: %s", userId, user); }第一步-解析用户请求Header里的token
通过token进一步拿到用户的相关信息,并将信息设置到request的attributes
由于解析过程大家各自实现不同,这里不贴完整代码了,设置上去的key你自己定
//解析token进一步拿到用户信息,假设是user //设置到request attribute里 request.setAttribute(IUserAuthUtil.LOGINED_USER, user);第二步-定义自己的注解(按需来,也可以不定义)
** * 注入登录的用户ID * * @author : humorchen * @date 2022/1/1 */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.PARAMETER) public @interface UserId { }
** * 注入登录的用户对象 * * @author : humorchen * @date 2022/1/1 */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.PARAMETER) public @interface LoginedUser { }第三步-自定义接口方法参数注入
@Component @Slf4j public class UserIdArgumentResolver implements HandlerMethodArgumentResolver { @Override public boolean supportsParameter(MethodParameter parameter) { Parameter reflectParameter = parameter.getParameter(); return reflectParameter.isAnnotationPresent(UserId.class) && reflectParameter.getType().equals(Long.class); } @Override public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception { User user = (User) webRequest.getAttribute(IUserAuthUtil.LOGINED_USER, NativeWebRequest.SCOPE_REQUEST); //从request拿到的 if (user != null) { return user.getId(); } return null; } }
@Component public class LoginedUserArgumentResolver implements HandlerMethodArgumentResolver { @Override public boolean supportsParameter(MethodParameter parameter) { Parameter reflectParameter = parameter.getParameter(); return reflectParameter.isAnnotationPresent(LoginedUser.class) && reflectParameter.getType().equals(User.class); } @Override public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception { return webRequest.getAttribute(IUserAuthUtil.LOGINED_USER, NativeWebRequest.SCOPE_REQUEST); } }第四步-注册上去
@Configuration public class WebMvcConfiguration implements WebMvcConfigurer { @Autowired private UserIdArgumentResolver userIdArgumentResolver; @Autowired private LoginedUserArgumentResolver loginedUserArgumentResolver; @Override public void addArgumentResolvers(List测试结果resolvers) { //@UserId注入 resolvers.add(userIdArgumentResolver); //@LoginedUser注入 resolvers.add(loginedUserArgumentResolver); } }
能够正常拿到
这里的User是我手动构建的登录态,很多参数是空的不用管
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)