使用SpringMVC,只需要在配置文件中进行注册即可,Spring Boot中没有配置文件,需要使用@Configuration注解来说明该类为一个配置类即可
使用SpringMVC中的配置内容需要实现WebMvcConfigurer即可,定义步骤如下
1.定义拦截器
实现HandlerInterceptor接口即可
package com.test.zzy.interceptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
@Component
public class MyInterceptor implements HandlerInterceptor {
//配置日志
private static final Logger logger= LoggerFactory.getLogger(MyInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String token = request.getParameter("token");
if(token!=null&&!"".equals(token)){
return true;
}
//logger.debug("拦截信息"+request.getRequestURI());
//System.out.println("拦截信息"+request.getRequestURI());
response.setCharacterEncoding("utf-8");
response.setContentType("application/json;charset=UTF-8");
PrintWriter writer = response.getWriter();
writer.write("请先登录");
return false;
}
}
2.定义配置文件
注意拦截的地址如果前面没有通配符,一般表示从项目的根目录开始,比如下面的/test/our/**写成/our/**是拦截不到/test/our/**请求的
package com.test.zzy.config;
import com.test.zzy.interceptor.MyInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class MyWebMvcConfig implements WebMvcConfigurer {
@Autowired
private MyInterceptor myInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(myInterceptor)
.addPathPatterns("/test/our/**")//表示拦截以/test/our/开头的路劲
.excludePathPatterns("/index.jsp","/jsp/**");//表示排除/index.jsp,/jsp开头的路劲
}
}
3.定义控制器
定义了两个路劲,一个拦截,一个不拦截
4.访问效果
一个拦截一个没有拦截