執(zhí)行流程
過濾器是在請求進(jìn)入容器后,但請求進(jìn)入servlet之前進(jìn)行預(yù)處理的。請求結(jié)束返回也是,是在servlet處理完后,返回給前端之前
請求按照上圖進(jìn)入conteoller后執(zhí)行完再返回
過濾器(Filter):
過濾器是Servlet規(guī)范中定義的一種組件,可以用于在請求進(jìn)入Web應(yīng)用程序之前或響應(yīng)離開Web應(yīng)用程序之前對請求進(jìn)行預(yù)處理或后處理。過濾器的應(yīng)用方式是通過在web.xml或Servlet注解中配置。
執(zhí)行流程:
請求進(jìn)入Web容器 → 過濾器預(yù)處理請求 → 請求傳遞給下一個過濾器或目標(biāo)Servlet → 響應(yīng)離開Web容器之前過濾器后處理響應(yīng)。
攔截器(Interceptor):
攔截器是Spring框架提供的一種組件,可以用于在請求進(jìn)入控制器(Controller)之前或渲染視圖之前執(zhí)行自定義邏輯。攔截器的應(yīng)用方式是通過實現(xiàn)HandlerInterceptor接口并注冊到Spring容器中。
執(zhí)行流程:
請求進(jìn)入DispatcherServlet → 攔截器預(yù)處理請求 → 請求傳遞給下一個攔截器或控制器 → 控制器處理請求 → 渲染視圖 → 攔截器后處理響應(yīng)。
監(jiān)聽器(Listener):
監(jiān)聽器是Servlet規(guī)范中定義的一種組件,可以用于監(jiān)聽Web應(yīng)用程序中的事件,例如應(yīng)用程序啟動、請求到達(dá)、會話創(chuàng)建和銷毀等。監(jiān)聽器的應(yīng)用方式是通過在web.xml或Servlet注解中配置。
執(zhí)行流程:
監(jiān)聽器注冊到Web容器中 → 監(jiān)聽器監(jiān)聽特定事件發(fā)生并執(zhí)行相應(yīng)邏輯。
攔截器的使用
創(chuàng)建一個攔截器類:
首先,您需要創(chuàng)建一個實現(xiàn)HandlerInterceptor接口的攔截器類。該接口定義了在請求處理的不同階段執(zhí)行的方法,例如在請求之前、請求處理之后以及請求完成之后。
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CustomInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 在請求之前執(zhí)行的邏輯
return true; // 返回true繼續(xù)執(zhí)行請求,返回false中斷請求
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
// 在請求處理之后執(zhí)行的邏輯
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// 在請求完成之后執(zhí)行的邏輯
}
}
注冊攔截器:
接下來,您需要將攔截器注冊到Spring Boot應(yīng)用程序中??梢酝ㄟ^創(chuàng)建一個配置類來完成這一步,使用WebMvcConfigurer接口的addInterceptors()方法注冊攔截器。
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new CustomInterceptor())
.addPathPatterns("/**"); // 可以指定攔截的路徑,例如 "/api/**"
}
}
過濾器的使用
創(chuàng)建一個過濾器類:
創(chuàng)建一個實現(xiàn)javax.servlet.Filter接口的過濾器類,實現(xiàn)過濾器的邏輯。
import javax.servlet.*;
import java.io.IOException;
public class CustomFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// 初始化過濾器(可選)
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// 過濾邏輯
chain.doFilter(request, response); // 傳遞請求給下一個過濾器或目標(biāo)Servlet
}
@Override
public void destroy() {
// 銷毀過濾器(可選)
}
}
注冊過濾器:
在Spring Boot項目中,您可以使用@WebFilter注解來注冊過濾器。在您想要應(yīng)用過濾器的類上添加該注解,并設(shè)置過濾器的URL模式。
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@Component
@WebFilter(urlPatterns = "/api/*") // 指定過濾的URL模式
@Order(1) // 指定過濾器順序
public class CustomFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// 初始化過濾器(可選)
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// 過濾邏輯
chain.doFilter(request, response); // 傳遞請求給下一個過濾器或目標(biāo)Servlet
}
@Override
public void destroy() {
// 銷毀過濾器(可選)
}
}
啟動應(yīng)用程序:
在啟動Spring Boot應(yīng)用程序時,過濾器將自動注冊并應(yīng)用于相應(yīng)的URL模式。
請注意,當(dāng)使用注解進(jìn)行過濾器的注冊時,需要確保在Spring Boot主類上添加@ServletComponentScan注解,以掃描和加載@WebFilter注解。文章來源:http://www.zghlxwxcb.cn/news/detail-537085.html
這樣,您就可以在Spring Boot項目中使用過濾器了。過濾器可以用于各種場景,如請求日志記錄、字符編碼設(shè)置、安全驗證等。根據(jù)您的需求,您可以在過濾器的doFilter()方法中編寫相應(yīng)的邏輯。文章來源地址http://www.zghlxwxcb.cn/news/detail-537085.html
到了這里,關(guān)于springbboot攔截器,過濾器,監(jiān)聽器及執(zhí)行流程的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!