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

...

@Configuration
public class WebSecurityConfig implements WebMvcConfigurer {


    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> 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<PasgrInfoFlightVo> queryIDInfo(@LoginUser UserVo userVo) throws AicException {
  ...
}
  1. List-1中,我们自定义了LoginUserHandlerMethodArgumentResolver,方法supportsParameter返回true标示支持此参数的解析,之后会调用resolveArgument进行参数的解析。
  2. List-2中,我们直接在controller的方法上加上@LoginUser注解,之后Spring会自动将userVo传入。

 

转载于:https://my.oschina.net/u/2518341/blog/3083820

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值