SpringBoot 拦截器
什么是拦截器?
java当中,客户端发起请求 被特定规则校验后是否存在于某个规则校验当中,存在即 被Interceptor 实现类拦截。
创建一个拦截器
我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
-
实现 HandlerInterceptor 接口;
-
并且重写 preHandle, postHandle, afterCompletion 方法;
public class requestInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();//获取session
String URL = request.getRequestURL().toString();//获取请求URL
System.out.println("请求地址:" + URL);
Object obj = session.getAttribute(constants.USER_);//得到登录USER
if (obj == null) {
//可以 在进行权限验证,登录校验等。
System.out.println("未登录-需要登录");
request.getRequestDispatcher("/login.html").forward(request, response);
return false;
} else {
return true;
}
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { }
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { }
}
- preHandle 在客户端发送处理请求之前被调用。预处理,可以进行编码、安全控制、权限校验等处理;
- postHandle 在业务处理器处理请求执行完成后,生成视图之前执行。后处理(调用了Service并返回ModelAndView,但未进行页面渲染),有机会修改ModelAndView ;
- afterCompletion 在DispatcherServlet完全处理完请求后被调用,可用于清理资源等。返回处理(已经渲染了页面);
配置 拦截器 (让拦截器生效)
- 实现 WebMvcConfigurer 类
还有其他实现(类) ,使用 起来类似,但是需要注意静态资源释放的小细节。
@Configuration
public class mvcConfig implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
//设置默认跳转试图
//registry.addViewController("/").setViewName("index");
//registry.addViewController("/index.html").setViewName("index");
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
//需要配置2:----------- 告知拦截器:/login.html 与 /static/** 不需要拦截 (配置的是 路径)
// ==/login.html 是controller对应的方法
// ==/static/** 是静态资源路径
registry.addInterceptor(new requestInterceptor()).addPathPatterns("/**").excludePathPatterns("/login.html")
.excludePathPatterns("/static/**");
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {}
}
使用WebMvcConfigurer配置拦截器,在释放静态资源的的时候需要在application.yml里面加入配置,才能生效
2. 配置application.yml配置
spring:
mvc:
static-path-pattern: /static/**
配置好后,在html(jsp)上面访问 静态资源文件写法
<link rel="stylesheet" href="/static/css/xadmin.css">
项目结构图: