zoukankan      html  css  js  c++  java
  • 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";
        }
    
    
    }
  • 相关阅读:
    shell 格式化输出
    Linux tar 修改终端命令
    uniqu 用法
    HashMap按照value值进行排序
    汇编语言系列教程之基础入门 (一)
    Linux权限管理
    linux用户管理
    vim的tab键设定
    HTTP请求(GET与POST区别)和响应
    JS eval()
  • 原文地址:https://www.cnblogs.com/lzy1212/p/13024849.html
Copyright © 2011-2022 走看看