拦截器
2024年11月17日大约 1 分钟
在日常开发的时候有一些页面是不能直接访问的,因为需要某一些参数,需要进行验证之后才能继续访问,这时候就可以使用拦截器进行拦截
应用场景
- 日志记录
- 权限检查
- 性能检测
实现
配置文件
<!--配置拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<!--要拦截的路径-->
<mvc:mapping path="/路径"/>
<!--放行路径-->
<mvc:exclude-mapping path="/路径"/>
<!--由哪个类负责拦截-->
<bean class="类的全路径"/>
</mvc:interceptor>
</mvc:interceptors>
一般拦截的路径是全部拦截,只放行一条路径用于做验证使用
Java代码
public class Login implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
return false;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
}
preHandle():在请求被处理之前进行操作
postHandle():在请求被处理之后,但结果还没有渲染前进行操作,可改变响应结果
afterCompletion():所有的请求响应结束后执行善后工作,清理对象,关闭资源
Spring-Boot实现
拦截器类跟上面一样,但是配置文件不再是以上方式,需要在类中编写,如:
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import top.xmln.lookingservertoplay.interceptor.TokenInterceptor;
import java.util.List;
/**
* @description: 配置MVC内容
* @author: 曦暮流年
*/
@Configuration
public class WebConfig implements WebMvcConfigurer {
// 配置拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 配置Token拦截器
registry.addInterceptor(new TokenInterceptor())
.addPathPatterns("/**")
.excludePathPatterns(List.of(
"/user/login",
"/user/register",
"/mail/sendMail"
));
}
}