千家信息网

Springboot中怎么通过自定义HandlerMethodArgumentResolver获取当前登陆者

发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,本篇文章为大家展示了Springboot中怎么通过自定义HandlerMethodArgumentResolver获取当前登陆者,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希
千家信息网最后更新 2025年12月03日Springboot中怎么通过自定义HandlerMethodArgumentResolver获取当前登陆者

本篇文章为大家展示了Springboot中怎么通过自定义HandlerMethodArgumentResolver获取当前登陆者,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

Springboot版本是2.0.5.release。

一般在controller方法中要获取当前登陆者,我们可以自定义HandlerMethodArgumentResolver来实现,如下:

List-1

@Target(ElementType.PARAMETER)@Retention(RetentionPolicy.RUNTIME)public @interface LoginUser {}...public class LoginUserHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {    @Override    public boolean supportsParameter(MethodParameter methodParameter) {        return methodParameter.getParameterType().isAssignableFrom(UserVo.class) &&                methodParameter.hasParameterAnnotation(LoginUser.class);    }    @Override    public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception {        return SpringHelper.getLoginUser();    }}...@Configurationpublic class WebSecurityConfig implements WebMvcConfigurer {    @Override    public void addArgumentResolvers(List resolvers) {        resolvers.add(new LoginUserHandlerMethodArgumentResolver());    }...public class SpringHelper {    public static HttpServletRequest getCurrentRequest() {        HttpServletRequest request = null;        try {            RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();            if (null==requestAttributes){                return null;            }            request = ((ServletRequestAttributes)requestAttributes ).getRequest();        } catch (Exception e) {            return request;        }        return request;    }    public static UserVo getLoginUser() {        return (UserVo) getCurrentRequest().getSession().getAttribute(WebSecurityConfig.SESSION_KEY);    }}

List-2

public List queryIDInfo(@LoginUser UserVo userVo) throws AicException {  ...}
  1. List-1中,我们自定义了LoginUserHandlerMethodArgumentResolver,方法supportsParameter返回true标示支持此参数的解析,之后会调用resolveArgument进行参数的解析。

  2. List-2中,我们直接在controller的方法上加上@LoginUser注解,之后Spring会自动将userVo传入。

上述内容就是Springboot中怎么通过自定义HandlerMethodArgumentResolver获取当前登陆者,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

0