标签:try configure header 回调 pos 机制 obj stat 应用服务器
javaWeb有三大组件,分别是:servlet,Filter,Listener
广义:Servlet是一个运行在web服务器或者应用服务器上的一个应用程序,用来动态处理客户端请求的资源。
狭义:Servlet是一个继承了GenericServlet类的子类。该类中的service方法用来处理相关的资源请求。
在Servlet规范中定义了多种类型的监听器。主要是三种域对象的监听ServletContext
,HttpSession
,HttpRequest
,根据其功能可以划分为两类
Filter和Servlet类似。Servlet用来处理请求,而Filter用来拦截和放行请求。
作用:
Filter存在四种拦截方式
spring拦截器是spring Aop的一种应用,在不修改源码的情况下,执行一段代码,以增强现有方法。
实现方式:
通过实现HandlerInterceptor
接口,重写内部的三个方法
场景 | Filter | Interceptor |
---|---|---|
执行机制 | 函数回调 | Java反射 |
执行场景 | 几乎所有的servlet请求都可使用 | 只能使用在spring定义的controller中 |
环境依赖 | 依赖servlet环境 | 依赖spring环境 |
是否可以使用Bean | 不可以 | 可以 |
SpringBoot对MVC进行了自动配置,当需要使用拦截器的时候,需要在WebMvcConfigurer实现类中添加自定义的拦截器,并定义拦截路径和排除路径
//自定义的拦截器,未登陆的用户直接转发到登陆界面
public class MyInterceptorResolve implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Object loginStatus = request.getSession().getAttribute("loginStatus");
if(loginStatus !=null ){
return true ;
}else{
request.setAttribute("msg","权限不足请先登陆");
request.getRequestDispatcher("/index").forward(request,response);
return false ;
}
}
@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 {
}
}
添加到容器中
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MyInterceptorResolve()).addPathPatterns("/**").excludePathPatterns("/index","" +
"/index.html","/login.html","/user/login","/main");
}
标签:try configure header 回调 pos 机制 obj stat 应用服务器
原文地址:https://www.cnblogs.com/onlyzuo/p/12248252.html