1)拦截器实现HandlerInterceptor接口,重写三个方法:preHandle,postHandle,afterCompletion,
MySpringMVCConfig 实现 WebMvcConfigurer 重写addInterceptors方法,添加拦截路径及排除拦截路径。 import com.example.dao.User; import com.example.util.UserContext; import org.springframework.lang.Nullable; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class UserConfig implements HandlerInterceptor { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("preHandle"); User current = UserContext.getCurrent(); if(current == null){ return false; } return true; } public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception { System.out.println("postHandle"); } public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception { System.out.println("afterHandle"); } }
import org.springframework.context.annotation.Bean; 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 MySpringMVCConfig implements WebMvcConfigurer { @Bean public UserConfig getUserConfig(){ return new UserConfig(); } public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(getUserConfig()).addPathPatterns("/**").excludePathPatterns("/login"); } }
由以上代码可以实现拦截除"/login" 以外的所有"/**"方法。
2)使用AOP代理,自定注解实现拦截功能,参看另一文章。
3)使用@WebFilter注解添加拦截路径,实现Filter接口重写doFilter方法。
package com.example.config; import org.springframework.stereotype.Component; import javax.servlet.*; import java.io.IOException; @Component @javax.servlet.annotation.WebFilter(urlPatterns = "/*",filterName = "test") public class WebFilter implements Filter { public void init(FilterConfig filterConfig) throws ServletException { System.out.println("init_Method"); } public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("doFilter"); filterChain.doFilter(servletRequest,servletResponse); } public void destroy() { System.out.println("destoryFilter"); } }