一、过滤器的3种实现方法
1、通过注解的方式实现
@WebFilter(initParams = {@WebInitParam(name = "aaa", value = "sss")})
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("调用01过滤器");
String aaa = filterConfig.getInitParameter("aaa");
System.out.println(aaa);
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("对01 request 进行过滤");
filterChain.doFilter(servletRequest, servletResponse);
System.out.println("对01 response 过滤");
}
@Override
public void destroy() {
System.out.println("01 调用了destroy方法");
}
}
2、使用Java配置类注册过滤器
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// 过滤器初始化代码
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// 在请求处理之前执行的逻辑
// 例如,可以在这里记录请求信息或者进行权限校验
// 继续执行链中的下一个过滤器或servlet
chain.doFilter(request, response);
// 在请求处理之后执行的逻辑
// 例如,可以在这里记录响应信息
}
@Override
public void destroy() {
// 过滤器销毁时执行的代码
}
}
--------------------------------------------------------------
@Configuration
public class FilterConfig {
@Bean
public FilterRegistrationBean<MyFilter> myFilter() {
FilterRegistrationBean<MyFilter> registrationBean = new FilterRegistrationBean<>();
registrationBean.setFilter(new MyFilter());
registrationBean.addUrlPatterns("/api/*"); // 设置过滤器应用的URL模式
registrationBean.setOrder(1); // 设置过滤器顺序
return registrationBean;
}
}
3、实现Filter接口并注册到Spring容器中
@Bean
public Filter myFilter() {
return new MyFilter();
}
二、拦截器的实现方法(HandlerInterceptor WebMvcConfigurer)
1、实现HandlerInterceptor接口或继承HandlerInterceptorAdapter类,并将过滤器注册到容器中
@Component
public class CustomInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 在请求处理之前进行调用(Controller方法调用之前)
System.out.println("Pre Handle");
return true; // 如果返回false,则停止流程,api不会被调用
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
// 请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)
System.out.println("Post Handle");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// 在整个请求结束之后调用,也就是在DispatcherServlet渲染了视图执行
System.out.println("After Completion");
}
}
- - - - -- - - - - - - - - - - - - - - - - - - - -
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Autowired
private CustomInterceptor customInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 添加拦截器
registry.addInterceptor(customInterceptor)
.addPathPatterns("/**"); // 拦截所有请求路径
//.excludePathPatterns("/login", "/error"); // 排除某些路径
}
}
相关推荐
本项目主要关注的是如何使用过滤器(Filter)和拦截器(Interceptor)来实现登录页面的控制与跳转。以下是对这些知识点的详细说明: 1. **SpringBoot**: SpringBoot是Spring框架的一个子项目,旨在简化Spring应用...
在现代软件开发过程中,特别是Web应用程序中,为了实现灵活高效的业务逻辑处理及控制流管理,常常会使用到两种设计模式:拦截器(Interceptor)与过滤器(Filter)。这两种技术虽然在功能上有一定的相似之处,但其...
Spring MVC中的拦截器实现通常会继承HandlerInterceptorAdapter,这样只需要重写需要的方法即可,减少了重复代码。例如,我们可能会在preHandle方法中进行权限检查,postHandle方法中更新缓存,而在afterCompletion...
假设我们需要为/admin目录下的所有页面添加权限验证功能,可以通过配置拦截器实现: ```xml <!-- action --> !*" class="newsAction" method="{1}"> ``` 其中,`AccessInterceptor`类实现了...
最后,从实现上来说,拦截器可以多次被调用,而过滤器只能被调用一次。这意味着,拦截器可以在不同的时间点上被调用,而过滤器只能在容器初始化时被调用。 下面是一个使用拦截器进行/admin 目录下 JSP 页面的过滤的...
在Web开发领域,过滤器(Filter)和拦截器...了解并熟练运用过滤器和拦截器,可以帮助开发者更有效地实现Web应用的扩展功能和增强应用的可维护性。在实际开发中,应根据具体需求和所使用的框架选择合适的技术。
同时,由于它们都是预处理和后处理机制,因此可以利用拦截器实现过滤器无法完成的高级功能,如AOP切面。 了解这两者的区别与联系,有助于我们在实际开发中更灵活地选择和使用合适的技术手段,提高代码的可维护性和...
1、在SpringBoot中如何实现自定义过滤器(Filter)和拦截器(Interceptor) 2、通过执行案例了解多个过滤器和拦截器的执行顺序 【本案例包含源码以及可执行的jar文件,源码文件建议使用IDEA进行导入查看学习,建议使用...
在Struts2中,过滤器(Filter)和拦截器(Interceptor)是实现业务逻辑控制和增强功能的重要机制。下面将详细阐述这两个概念以及它们在实际项目中的应用。 首先,过滤器在Servlet容器中扮演着预处理请求和后处理...
在iOS中,拦截过滤器可以使用协议(Protocols)和代理(Delegation)来实现,或者利用Block和GCD(Grand Central Dispatch)来创建一个过滤器链。每个过滤器作为一个独立的类,遵循统一的协议,通过调用协议中的方法...
在标题“过滤器拦截并处理request请求”中,我们关注的是如何使用Servlet Filter来对客户端发送的HTTP请求进行操作。描述指出,过滤器可以捕获这些请求,分析并修改它们,以便后台服务能够接收到经过处理的数据。 ...
综上所述,拦截器和过滤器在Web开发中各自扮演着重要角色,而文件上传作为常见的业务需求,可以通过Struts2框架中的拦截器机制进行高效且安全的实现。理解它们的工作原理和区别,有助于提高开发效率和代码质量。
Spring Boot 实现过滤器、拦截器与切片
在本文中,我们将深入探讨如何在Spring Boot应用中使用拦截器(Interceptor)和过滤器(Filter)来处理用户的登录session。这两个组件都是Spring框架的重要部分,它们在处理HTTP请求和响应时发挥着关键作用。 首先...
"拦截器过滤器.rar"这个压缩包文件很可能包含了一些示例代码或教程,教你如何在Web应用程序中实现请求和响应的过滤与拦截。让我们深入探讨这两种技术。 1. **拦截器(Interceptor)** 拦截器通常在基于MVC(Model-...
Struts2 中的拦截器(Interceptor)和过滤器(Filter)是两个不同的概念,虽然它们都可以影响请求的处理过程,但它们的作用域、执行顺序和实现机制都有所不同。 拦截器(Interceptor) 拦截器是 Struts2 框架中的...
System.out.println("拦截器实现"); return true; } ``` 在上面的代码中,我们在 preHandle() 方法中输出了一条信息,以便了解拦截器的执行过程。 三、Filter 和 Interceptor 的区别 Filter 和 Interceptor 都...