网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

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

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

创新互联是一家专注于成都网站建设、成都网站制作与策划设计,碑林网站建设哪家好?创新互联做网站,专注于网站建设十余年,网设计领域的专业建站公司;建站业务涵盖:碑林等地区。碑林做网站价格咨询:13518219792

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

...

@Configuration
public 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获取当前登陆者,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注创新互联行业资讯频道。


本文名称:Springboot中怎么通过自定义HandlerMethodArgumentResolver获取当前登陆者
分享地址:http://bjjierui.cn/article/gcohdc.html

其他资讯