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 {}
  • 相关阅读:
    树的可视化
    图的可视化
    1+1=2
    用xapian来做索引
    学习的快乐
    项目小结
    z=sin(xy)
    Min Stack
    互联网公司的文化
    为什么要读数学书
  • 原文地址:https://www.cnblogs.com/wdsjg/p/13708257.html
Copyright © 2011-2022 走看看