700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 使用自定义注解获取当前登录用户

使用自定义注解获取当前登录用户

时间:2021-10-11 21:41:14

相关推荐

使用自定义注解获取当前登录用户

在开发过程中,我们经常需要用到当前登录用户的信息。那如何优雅而又方便的拿呢?强大的spring大表哥已经帮我们想好了。

1.创建自己的自定义注解。如下,创建@CurrUser

/*** 当前用登录户注解* Created by caidapao on /3/30* Time 21:58*/@Target({ElementType.PARAMETER})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface CurrUser {/*** 当前用户在session对象中的key,GlobalExt.CURRENT_MANAGER是个全局字符串*/String value() default GlobalExt.CURRENT_MANAGER;}

PS:

1.@Target指定注解的使用范围,这里我们指定ElementType为PARAMETER,也就是参数即可。

2.@Retention作用是定义该注解能保留多久,一共有三种策略,这里我们指定为RUNTIME,也就是运行时。

2.创建@CurrUser的解析器类,该类实现spring的HandleMethodArgumentResolver

/*** 实现@currUser的参数解析器* Created by caidapao on /3/30* Time 22:02*/public class CurrUserMethodArgumentResolver implements HandlerMethodArgumentResolver {@Overridepublic boolean supportsParameter(MethodParameter methodParameter) {if(methodParameter.hasParameterAnnotation(CurrUser.class)){return true;}return false;}@Overridepublic Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception {CurrUser currentUserAnnotation = methodParameter.getParameterAnnotation(CurrUser.class);return nativeWebRequest.getAttribute(currentUserAnnotation.value(), NativeWebRequest.SCOPE_SESSION);}}

PS:

这里要重载两个方法。

1.supportsParameter方法,判断什么时候要执行下面的resolveArgument方法。这里我们判断当一个方法的参数含有@CurrUser的时候返回true。

2.resolveArgument方法,在这里我们直接把放在session中的用户信息放回去即可。

3.配置自己的注解解析器交给spring统一管理。

3.1.如果你的项目的配置使用spring-servlet.xml(名字不一定是这个)进行配置的,则添加如下配置:

<!-- 这里配置的argument-resolvers 最终是被注入到了 RequestMappingHandlerAdapter类的customArgumentResolvers字段值中--><!-- 然后交给spring统一管理--><mvc:annotation-driven><mvc:argument-resolvers><bean class="mon.annotation.impl.CurrUserMethodArgumentResolver"/>//这里是你的解析器路径</mvc:argument-resolvers></mvc:annotation-driven>

3.2.如果你不喜欢丢在xml里面,那也可以通过创建自己的WebCofing.java通过代码来配置,如下:

/*** web 配置* Created by caidapao on /4/2* Time 23:38*/@Configurationpublic class WebConfigurer extends WebMvcConfigurerAdapter {/*** 其实从这里看出来,与配置在spring-servlet.xml中相比,都是实例化一个自己注解解析器,* 然后将它add进spring的List<HandlerMethodArgumentResolver> argumentResolvers中* 最后交给spring统一管理* @param argumentResolvers*/@Overridepublic void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {argumentResolvers.add(currUserMethodArgumentResolver());super.addArgumentResolvers(argumentResolvers);}/*** 实例化自己的注解解析器* @return*/@Beanpublic CurrUserMethodArgumentResolver currUserMethodArgumentResolver() {return new CurrUserMethodArgumentResolver();}}

4.测试。这里我们访问/managers/login将登录的用户信息直接放在session中,然后访问/managers/testCurrUser

/*** 管理员* Created by caidapao on /1/2.* Time 19:38*/@Controller@RequestMapping("/managers")public class ManagersController {/*** 模拟管理员登录* @param loginVo* @param session* @throws UserLoginException*/@ResponseBody@RequestMapping(value = "/login")public Object login(LoginVo loginVo, HttpSession session) throws UserLoginException {Managers managers = ServiceManager.managersService.checkLogin(loginVo.getUsername(),loginVo.getPassword());//这里我们直接放入sessionsession.setAttribute(GlobalExt.CURRENT_MANAGER,managers);return managers;}/*** 测试注解是否能拿到值* @param managers* @return*/@ResponseBody@RequestMapping(value = "/testCurrUser")public Object testCurrUser(@CurrUser Managers managers) {return managers;}}

测试结果:

全文完。希望各位同学看完后能有所收获,不仅仅是获取当前登录用户的信息,只要是方法参数的注解,本文都是有帮助的。

如果这篇文章对你有帮助,可以点赞鼓励一下嘛~

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。关注作者的订阅号:java-caidapao,获取更多技术干货,和大炮老哥一起从零成为技术大牛。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。