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>
如果有缺陷,请注明,谢谢。