zoukankan      html  css  js  c++  java
  • SSM中的拦截器

    SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。开发者可以自己定义一些拦截器来实现特定的功能。

    过滤器与拦截器的区别:拦截器是AOP思想的具体应用。

    过滤器

    • servlet规范中的一部分,任何java web工程都可以使用

    • 在url-pattern中配置了/*之后,可以对所有要访问的资源进行拦截

    拦截器

    • 拦截器是springMVC框架自己的,只有使用了SpringMVC框架的工程才能使用

    • 拦截器只会拦截访问的控制器方法,如果访问的是jsp/html/css/image/js是不会进行拦截

    自定义拦截器

    实现 HandlerInterceptor 接口。

    1. 新建一个Moudule

    2. 配置web.xml与 springmvc-servlet.xml文件

    3. 编写一个拦截器

    public class MyInterceptor implements HandlerInterceptor {
    
        //在请求处理的方法之前执行
        //如果返回true执行下一个拦截器
        //如果返回false就不执行下一个拦截器
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("处理前===============");
            return true;
        }
    
        //在请求处理方法执行之后执行
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    
        }
    
        //在dispatcherServlet处理后执行,做清理工作
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    
        }
    }

    4、spring中配置拦截器

    <!--    拦截器配置-->
    <mvc:interceptors>
        <mvc:interceptor>
    <!--        /** 包括路劲及其子路径-->
    <!--        /admin/* 拦截的是/admin/add等等这种 , /admin/add/user不会被拦截-->
    
    <!--        /admin/** 拦截的是/admin/下的所有-->
            <mvc:mapping path="/**"/>
    <!--        bean配置的就是拦截器-->
            <bean class="com.guo.config.MyInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>

    5、请求

    @RestController
    public class TestController {
    
        @RequestMapping("/t1")
        public String test(){
            System.out.println("执行了test()");
            return "success";
        }
    }

    实战

    1、自定义拦截器,继承HandlerInterceptor

    package com.guo.HandlerInterceptor;
    
    import com.guo.pojo.User;
    import org.springframework.web.servlet.HandlerAdapter;
    import org.springframework.web.servlet.HandlerInterceptor;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    public class handlerInterceptor implements HandlerInterceptor {
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //通过session,拿到用户登录信息
            HttpSession session =request.getSession();
            User userSession =(User) session.getAttribute("USER_SESSION");
        //获取角色属性 Integer userRole
    = userSession.getUserRole();
        //截取请求片段 String requestURI
    = request.getRequestURI(); if(userSession != null){ if(userRole==2){
            //对比截取的请求片段中,是否存在"/provider"
    if(requestURI.contains("/provider") || requestURI.contains("/bill")){ return true; }else { request.getRequestDispatcher("/jsp/error.jsp").forward(request,response); return false; } }else if(userRole==3){ if(requestURI.contains("/bill")){ return true; }else { request.getRequestDispatcher("/jsp/error.jsp").forward(request,response); return false; } }else{ return true; } }else { response.sendRedirect(request.getContextPath()+"/log/error"); return false; } } }

    2、配置spring  xml文件

    <!--    HandleInterceptor-->
        <mvc:interceptors>
            <mvc:interceptor>
                <mvc:mapping path="/user/**"/>
                <mvc:mapping path="/provider/**"/>
                <mvc:mapping path="/bill/**"/>
    
                <bean class="com.guo.HandlerInterceptor.handlerInterceptor"/>
            </mvc:interceptor>
        </mvc:interceptors>

    3、controller层

    @Controller
    @RequestMapping("/user")
    public class UserController {}
    
    @Controller
    @RequestMapping("/provider")
    public class ProviderController {}
    
    @Controller
    @RequestMapping("/bill")
    public class BillController {}
  • 相关阅读:
    第36课 经典问题解析三
    第35课 函数对象分析
    67. Add Binary
    66. Plus One
    58. Length of Last Word
    53. Maximum Subarray
    38. Count and Say
    35. Search Insert Position
    28. Implement strStr()
    27. Remove Element
  • 原文地址:https://www.cnblogs.com/wdsjg/p/13708257.html
Copyright © 2011-2022 走看看