zoukankan      html  css  js  c++  java
  • 自定义注解获取当前登录用户

    在做项目的时候,我们经常会用到当前登录的用户,获取这个用户相关的信息,总是用User user = session.getAttribute("user"); 这个写的次数太多,还要获取session实在太费事,能不能简单,实用呢?

    今天,我们就来探讨,注解实现参数解析,放在session中;

    1.首先,我们创建一个自己的自定义注解;

    import java.lang.annotation.Documented;
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;

    @Target({ElementType.PARAMETER})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface SA {


    }

    解释下:@Target({ElementType.PARAMETER})  这个是元注解(用来定义注解的注解称为元注解),它的意思是这个注解是一个注解参数的注解;

                  @Retention(RetentionPolicy.RUNTIME)  这个意思是:在java代码编译时,jvm运行时都会存在;

                  @Documented  它会被 javadoc 之类的工具处理, 所以注解类型信息也会被包括在生成的文档中;这个解释我也没仔细研究过,但是你想仔细研究的话可以去查查,这里不再阐述;

    2.写好以上注解后,我们还要解析下这个注解,是用来做什么的,该类实现spring的HandlerMethodArgumentResolver;

    import org.springframework.core.MethodParameter;
    import org.springframework.web.bind.support.WebDataBinderFactory;
    import org.springframework.web.context.request.NativeWebRequest;
    import org.springframework.web.method.support.HandlerMethodArgumentResolver;
    import org.springframework.web.method.support.ModelAndViewContainer;

    import com.look.sys.bind.annotation.SA;

    public class SaResolver implements HandlerMethodArgumentResolver {

                 @Override
                public boolean supportsParameter(MethodParameter parameter) {
                           return parameter.hasParameterAnnotation(SA.class);
                   }

                @Override
                public Object resolveArgument(MethodParameter p, ModelAndViewContainer mavContainer,
                NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
                           return webRequest.getAttribute(p.getParameterName(), NativeWebRequest.SCOPE_SESSION);
                     }

             }

    解释下: supportsParameter  这个方法返回boolean  值,如果是true,就是如果这个注解被用到,就继续执行下面的resolveArgument,把session值放在SA注解中;

                   HandlerMethodArgumentResolver  看到名称我们也就知道这个是处理方法参数的解析器;

    3.把自己的注解解析器交给spring容器进行管理;

             <!-- 然后交给spring统一管理-->

              <mvc:annotation-driven>

                <mvc:argument-resolvers>
                          <bean class="com.look.sys.bind.resolver.SaResolver"/>
               </mvc:argument-resolvers>

             </mvc:annotation-driven>

    到这里我们,就把注解@SA 写好,并解析了,那么怎么用呢?

    4.写在controller里

    @RequestMapping("/")
    public String index(@SA User user,HttpServletRequest request, Integer type) {

                      Stirng userId = user.getUserId();//获取userId

                       ......省略XXXX

             

    }

    如果你觉得这种方法,好用,可以尝试下;

  • 相关阅读:
    一行代码解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10(如果今天你的老板还在要求你兼容IE6~8,别犹豫,辞职吧。)
    HTML元素分类【三种类型】
    React-Native 学习笔记-Android开发平台-开发环境搭建
    常用原生JS函数和语法集合
    jQuery选择器总结
    jQuery选择器大全
    Sublime Text 3 的HTML代码格式化插件Tag
    用CSS画三角形
    纯CSS绘制三角形(各种角度)
    纯CSS写三角形-border法[晋级篇01]
  • 原文地址:https://www.cnblogs.com/luojiesheng/p/9776979.html
Copyright © 2011-2022 走看看