本篇文章为大家展示了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 {
...
}
List-1中,我们自定义了LoginUserHandlerMethodArgumentResolver,方法supportsParameter返回true标示支持此参数的解析,之后会调用resolveArgument进行参数的解析。
List-2中,我们直接在controller的方法上加上@LoginUser注解,之后Spring会自动将userVo传入。
上述内容就是Springboot中怎么通过自定义HandlerMethodArgumentResolver获取当前登陆者,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/u/2518341/blog/3083820