• SpringMVC 通过实现HandlerInterceptor接口 实现拦截器功能


    定义一个类实现HandlerInterceptor

    package cn.liziy.interceptors;
    
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.util.List;
    
    
    public class LoginInterceptor implements HandlerInterceptor {
    
        private static final Log logger = LogFactory.getLog(UserLoginInterceptor.class);
    
        private List<String> exceptUrls;
    
        public List<String> getExceptUrls() {
            return exceptUrls;
        }
    
        public void setExceptUrls(List<String> exceptUrls) {
            this.exceptUrls = exceptUrls;
        }
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("进入preHandle");
            //flag 用于判断用户是否登录,默认为false
            boolean flag = false;
            //获取请求的路径进行判断
            String servletPath = request.getServletPath();
            System.out.println("获取到的URL "+servletPath);
            //过滤不需要拦截的页面
            for(String s : exceptUrls){
                if(servletPath.contains(s)){
                    flag = true;
                    break;
                }
            }
            //当页面被拦截时进入
            if(!flag){
               
            }
            System.out.println("是否允许通过 "+flag);
            return flag;
        }
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            System.out.println("postHandle");
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            System.out.println("afterCompletion");
        }
    }

    在applicationContext.xml 配置interceptors,设置不拦截的请求

    <mvc:interceptors>
            <mvc:interceptor>
                <!-- 拦截所有请求 -->
                <mvc:mapping path="/**" />
                <!-- 之间创建的拦截器类 -->
                <bean class="cn.liziy.interceptors.LoginInterceptor">
                    <property name="exceptUrls">
                        <list>
                            <!-- 配置不拦截的请求 -->
                            <value>/index</value>
                            <value>/login</value>
                            <value>/user/login</value>
                            <value>/register</value>
                            <value>/user/register</value>
                        </list>
                    </property>
                </bean>
            </mvc:interceptor>
        </mvc:interceptors>    

    博主测试的时候 出现了前端js文件被拦截了

    我的解决方法

    在applicationContext.xml 中添加这段配置

    <!--  放行静态资源 -->
        <mvc:default-servlet-handler/>

    发现拦截器依旧拦截

    第二种解决方案

    在web.xml添加这段配置 位于DispatcherServlet前面

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
             version="3.1">
    
        <!--不拦截以下请求-->
        <servlet-mapping>
            <servlet-name>default</servlet-name>
            <url-pattern>*.js</url-pattern>
            <url-pattern>*.ico</url-pattern>
            <url-pattern>*.css</url-pattern>
        </servlet-mapping>
        <!--配置DispatcherServlet-->
        <servlet>
            <servlet-name>SpringMVC</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:spring/applicationContext.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>SpringMVC</servlet-name>
            <!--默认匹配所有请求-->
            <url-pattern>/</url-pattern>
        </servlet-mapping>
    </web-app>

    Controller 代码

    package cn.liziy.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.GetMapping;
    
    /**
     * @ClassName LoginControllerWeb
     * @Author:Liziy
     * @Date 2020/5/11 19:46
     * @Description:
     **/
    @Controller
    public class LoginControllerWeb {
    
        @GetMapping("/register")
        public String toUserRegister(){
            return  "web/register";
    
        }
    
        @GetMapping("/login")
        public String toUserLogin(){
            return  "web/login";
        }
    
        @GetMapping("/web/welcome")
        public String toWelcome(){
            return  "web/welcome";
        }
    
    
    }
  • 相关阅读:
    Oracle 数据库 用脚本建表空间
    C++ 类中封装Win32API的回调函数
    在MVC 4 中使用自定义Membership
    机试题目
    sscanf()
    字符串转化为整数
    有序数组中一对数的和为特定数
    把一个数组划分成左边奇数右边偶数
    cocos2dx将背景色改为白色
    字符串单词翻转
  • 原文地址:https://www.cnblogs.com/lzy1212/p/13024849.html
Copyright © 2020-2023  润新知