Spring Boot 攔截器配置及靜態頁面訪問
1:攔截器配置
過濾器 適合請求內容和視圖內容處理,例如多部分表單和GZIP壓縮
攔截器 適合處理公共處理程序代碼和授權檢查
首先,創建支持它的@Component類,並且應實現 HandlerInterceptor 接口。
攔截器常用的方法:
- preHandle():請求發送到控制器之前執行操作
- postHandle():將響應發送到客戶端之前執行操作
- afterCompletion():完成請求和響應後執行操作
@Component
public class InterceptorConfig implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
System.out.println("執行preHandle方法");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("執行postHandle方法");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
System.out.println("執行afterCompletion方法");
}
}
使用 WebMvcConfigurerAdapter 向 InterceptorRegistry 註冊此攔截器
@Component
public class WebConfig extends WebMvcConfigurationSupport {
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 註冊自定義攔截器,添加攔截路徑和排除攔截路徑
registry.addInterceptor(new InterceptorConfig()) // 添加攔截器
.addPathPatterns("/**"); // 添加攔截路徑
// .excludePathPatterns(// 添加排除攔截路徑
// "/**").order(0);//執行順序
super.addInterceptors(registry);
}
}
2:靜態頁面訪問
2.1:添加靜態資源文件,外部可以直接訪問地址
@Component
public class WebConfig extends WebMvcConfigurationSupport {
/**
* 添加靜態資源文件,外部可以直接訪問地址
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
}
}
但此時 Controller 層並不能返回 頁面
不過可以直接訪問靜態文件
比如:localhost:8080/static/china.png
2.2:Controller 返回頁面
在 pom.xml 中添加:
<!-- 模板 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
Controller 層:
@Controller
public class ViewController {
@RequestMapping("/getHome")
public String getHome(){
return "home";
}
}
HTML 頁面:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div style="color:red">hello world</div>
</body>
</html>
如果有缺陷,請註明,謝謝。