SpringBoot 攔截器 | 過濾器 | 監聽器css
1.攔截器:攔截器,在AOP(Aspect-Oriented Programming)中用於在某個方法或字段被訪問以前,進行攔截而後在以前或以後加入某些操做。攔截是AOP的一種實現策略。通常用於攔截用戶登陸,用戶驗證等。java
2.過濾器:它能夠對客戶的請求進行處理。處理完成後,它會交給下一個過濾器處理,這樣,客戶的請求在過濾鏈裏逐個處理,直到請求發送到目標爲止。通常用於對數據的處理。web
3.監聽器:能夠用於監聽Web應用中某些對象,信息的建立,銷燬,增長,修改,刪除等動做的發生,而後作出相應的響應處理spring
1.配置攔截器:session
實現的 HandlerInterceptor 接口jsp
package com.intercept; 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 UserInterceptor implements HandlerInterceptor { //方法執行前 @Override public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object o) throws Exception { System.out.println("方法執行前"); if(req.getSession().getAttribute("user")==null){ System.out.println("用戶未登陸或session失效"); resp.sendRedirect("/login/to_login"); return false; } return true; } //方法執行後 @Override public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception { System.out.println("方法執行後"); } //頁面渲染前 @Override public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception { System.out.println("頁面渲染前"); } }
- preHandle:在調用Controller方法前會調用此方法
- postHandle:在調用Controller方法後調用此方法後,頁面渲染以前調用此方法,好比能夠在這裏將渲染的視圖名稱更改成其餘視圖名稱。
- afterCompletion:頁面渲染完畢後調用此方法,一般用來清除某些資源,相似Java語法的finally
在WebMvcConfigurer中添加攔截器:ide
package com.intercept; 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 InterceptorConfig implements WebMvcConfigurer { //添加攔截器 @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new UserInterceptor()) .addPathPatterns("/**") //攔截請求 .excludePathPatterns("/login/to_login","/login/do_login", "/**/*.css","/**/*.js", "/**/*.png", "/**/*.jpg", "/**/*.jpeg", "/**/*.gif", "/**/fonts/*"); //不攔截登陸,和HTML樣式 } }
攔截器配置完成!post
2.過濾器配置url
建立test1過濾器類:spa
//攔截請求 //@WebFilter(filterName = "test1",urlPatterns = {"*.do","*.jsp"}) @WebFilter(filterName = "test1",urlPatterns = "/test1") public class test1 implements Filter { public void destroy() { } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { System.out.println("進入filter"); //放行 chain.doFilter(req,resp); System.out.println("離開filter"); } public void init(FilterConfig config) throws ServletException { } }
在啓動類加上註解 @ServletComponentScan:
@SpringBootApplication @ServletComponentScan //在spring boot啓動時會掃描@WebServlet,並將該類實例化 public class App { public static void main(String[] args) { SpringApplication.run(App.class,args); } }
過濾器配置完完成!