springBoot實現攔截器的幾種方式
阿新 • • 發佈:2019-01-08
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"); } }