spring boot之spring mvc常用配置--攔截器配置(4)
阿新 • • 發佈:2019-01-05
2.攔截器配置
攔截器Interceptor實現對每一個請求處理前後進行相關的業務處理。類似於Servlet的Filter。
第一種方式:可以讓普通的bean實現HandlerInterceptor介面或者繼承HandlerInterceptorAdapter類來實現自定義攔截器。
①繼承HandlerInterceptorAdapter類來實現自定義攔截器
攔截器Interceptor實現對每一個請求處理前後進行相關的業務處理。類似於Servlet的Filter。
第一種方式:可以讓普通的bean實現HandlerInterceptor介面或者繼承HandlerInterceptorAdapter類來實現自定義攔截器。
①繼承HandlerInterceptorAdapter類來實現自定義攔截器
重寫preHandle:在請求發生前執行、postHandle在請求完後執行。
package com.boot.springmvc.interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; public class DemoInterceptor extends HandlerInterceptorAdapter {//1 @Override public boolean preHandle(HttpServletRequest request, //2 HttpServletResponse response, Object handler) throws Exception { long startTime = System.currentTimeMillis(); request.setAttribute("startTime", startTime); return true; } @Override public void postHandle(HttpServletRequest request, //3 HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { long startTime = (Long) request.getAttribute("startTime"); request.removeAttribute("startTime"); long endTime = System.currentTimeMillis(); System.out.println("本次請求處理時間為:" + new Long(endTime - startTime)+"ms"); request.setAttribute("handlingTime", endTime - startTime); } }
②配置攔截器的bean,重寫addInterceptors
發起請求package com.boot.springmvc; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import org.springframework.web.servlet.view.InternalResourceViewResolver; import org.springframework.web.servlet.view.JstlView; import com.boot.springmvc.interceptor.DemoInterceptor; /** * @Bean public InternalResourceViewResolver viewResolver(); * 注入InternalResourceViewResolver類: * 說明:springmvc下有一個介面叫ViewResolver,(我們的viewResolver都實現該介面),實現這個介面要重寫 * resolverName(),這個方法的返回值介面View,而view的職責就是使用model、request、response物件,並 * 渲染檢視(不一定是html、可能是json、xml、pdf等)給瀏覽器 。 * */ @Configuration @EnableWebMvc // 1開啟預設配置 @EnableScheduling @ComponentScan("com.boot.springmvc") public class MyMvcConfig extends WebMvcConfigurerAdapter{//2 //viewResolver @Bean public InternalResourceViewResolver viewResolver() { InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); //viewResolver.setPrefix("/WEB-INF/classes/views/");//打war後預設編譯的路徑 viewResolver.setPrefix("/WEB-INF/views/");//使用tomcat7:run外掛後要放的位置 viewResolver.setSuffix(".jsp"); viewResolver.setViewClass(JstlView.class); return viewResolver; } //靜態資源對映 @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/assets/**").addResourceLocations("classpath:/assets/"); }// 3 //攔截器 @Bean // 1 public DemoInterceptor demoInterceptor() { return new DemoInterceptor(); } @Override public void addInterceptors(InterceptorRegistry registry) {// 2 registry.addInterceptor(demoInterceptor()); } }
處理結果