zoukankan      html  css  js  c++  java
  • Spring 注解拦截器使用详解

    Spring mvc拦截器

    平时用到的拦截器通常都是xml的配置方式。今天就特地研究了一下注解方式的拦截器。

    配置Spring环境这里就不做详细介绍。本文主要介绍在Spring下,基于注解方式的拦截器。

    第一步:定义Interceptor 实现类

    public class AuthInterceptor extends HandlerInterceptorAdapter {
        
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            
            if(handler.getClass().isAssignableFrom(HandlerMethod.class)){
                AuthPassport authPassport = ((HandlerMethod) handler).getMethodAnnotation(AuthPassport.class);
                
                //没有声明需要权限,或者声明不验证权限
                    if(authPassport == null || authPassport.validate() == false)
                    return true;
                else{                
                    //在这里实现自己的权限验证逻辑,判断使用session中是否有username,有的话,则验证通过,不拦截。
                    String username = (String) request.getSession().getAttribute("username");
                    if(username != null )//如果验证成功返回true
                        return true;
                    else//如果验证失败
                    {
                        //返回到登录界面
                        response.sendRedirect(request.getContextPath()+"/account/login");
                        return false;
                    }       
                }
            }
            else
                return true;   
         }
    }

    第二步:自定义Annotation实现类,添加于具体某个需要拦截的Controller。

    @Documented
    @Inherited
    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface AuthPassport {
        boolean validate() default true;
    }

    第三步:把定义的拦截器加到Spring MVC的拦截体系中。

    (1):在SpringMVC的配置文件添加拦截器所需要的schema,

      http://www.springframework.org/schema/mvc
      http://www.springframework.org/schema/mvc/spring-mvc.xsd" >

    (2):添加完schema后,便可以在springMVC的配置文件中直接使用标签:<mvc:interceptors>进行声明拦截器。拦截器声明配置文件代码如下:

    <mvc:interceptors> 
            <!-- 如果不定义 mvc:mapping path 将拦截所有的URL请求 -->
            <bean class="com.demo.web.auth.AuthInterceptor"></bean>
    </mvc:interceptors>  

    第四步:在Controller的方法中添加自定义拦截注解。只需要在具体的方法中添加@AuthPassport皆可

        @AuthPassport
        @RequestMapping(value={"/index","/hello"})
        public ModelAndView index(){
            
            ModelAndView modelAndView = new ModelAndView();  
            modelAndView.addObject("message", "Hello World!");  
            modelAndView.setViewName("index");  
            return modelAndView;
        }        

    通过上面的四步,便可以实现基于注解的方式对url进行拦截。

     代码下载地址:http://pan.baidu.com/s/1sjp5B1z

  • 相关阅读:
    Java 标识符
    Java 关键字详解
    Java 语言的主要特性
    redis学习
    垃圾回收
    JVM内存结构
    sql总结(DML)
    sql总结(DDL)
    加密算法
    《数据结构》 定长顺序串常用操作代码集合
  • 原文地址:https://www.cnblogs.com/superman66/p/4643097.html
Copyright © 2011-2022 走看看