定义一个类实现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"; } }