`

过滤器和拦截器的实现

 
阅读更多

一、过滤器的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"); // 排除某些路径

}

}

 

分享到:
评论

相关推荐

    Java SpringBoot实现的过滤器(和拦截器)控制登录页面跳转

    本项目主要关注的是如何使用过滤器(Filter)和拦截器(Interceptor)来实现登录页面的控制与跳转。以下是对这些知识点的详细说明: 1. **SpringBoot**: SpringBoot是Spring框架的一个子项目,旨在简化Spring应用...

    拦截器和过滤器的区别

    在现代软件开发过程中,特别是Web应用程序中,为了实现灵活高效的业务逻辑处理及控制流管理,常常会使用到两种设计模式:拦截器(Interceptor)与过滤器(Filter)。这两种技术虽然在功能上有一定的相似之处,但其...

    过滤器与拦截器的区别

    Spring MVC中的拦截器实现通常会继承HandlerInterceptorAdapter,这样只需要重写需要的方法即可,减少了重复代码。例如,我们可能会在preHandle方法中进行权限检查,postHandle方法中更新缓存,而在afterCompletion...

    Struts 2 过滤器和拦截器的区别

    假设我们需要为/admin目录下的所有页面添加权限验证功能,可以通过配置拦截器实现: ```xml &lt;!-- action --&gt; !*" class="newsAction" method="{1}"&gt; ``` 其中,`AccessInterceptor`类实现了...

    过滤器和拦截器区别区别

    最后,从实现上来说,拦截器可以多次被调用,而过滤器只能被调用一次。这意味着,拦截器可以在不同的时间点上被调用,而过滤器只能在容器初始化时被调用。 下面是一个使用拦截器进行/admin 目录下 JSP 页面的过滤的...

    过滤器/拦截器

    在Web开发领域,过滤器(Filter)和拦截器...了解并熟练运用过滤器和拦截器,可以帮助开发者更有效地实现Web应用的扩展功能和增强应用的可维护性。在实际开发中,应根据具体需求和所使用的框架选择合适的技术。

    SpringMVC的拦截器(Interceptor)和过滤器(Filter)的区别与联系

    同时,由于它们都是预处理和后处理机制,因此可以利用拦截器实现过滤器无法完成的高级功能,如AOP切面。 了解这两者的区别与联系,有助于我们在实际开发中更灵活地选择和使用合适的技术手段,提高代码的可维护性和...

    SpringBoot中使用过滤器(Filter)和拦截器(Interceptor)案例

    1、在SpringBoot中如何实现自定义过滤器(Filter)和拦截器(Interceptor) 2、通过执行案例了解多个过滤器和拦截器的执行顺序 【本案例包含源码以及可执行的jar文件,源码文件建议使用IDEA进行导入查看学习,建议使用...

    struts过滤器(拦截器)程序.zip

    在Struts2中,过滤器(Filter)和拦截器(Interceptor)是实现业务逻辑控制和增强功能的重要机制。下面将详细阐述这两个概念以及它们在实际项目中的应用。 首先,过滤器在Servlet容器中扮演着预处理请求和后处理...

    设计模式-拦截过滤器

    在iOS中,拦截过滤器可以使用协议(Protocols)和代理(Delegation)来实现,或者利用Block和GCD(Grand Central Dispatch)来创建一个过滤器链。每个过滤器作为一个独立的类,遵循统一的协议,通过调用协议中的方法...

    过滤器拦截并处理request请求

    在标题“过滤器拦截并处理request请求”中,我们关注的是如何使用Servlet Filter来对客户端发送的HTTP请求进行操作。描述指出,过滤器可以捕获这些请求,分析并修改它们,以便后台服务能够接收到经过处理的数据。 ...

    struts03:拦截器、过滤器与拦截器的区别、文件上传

    综上所述,拦截器和过滤器在Web开发中各自扮演着重要角色,而文件上传作为常见的业务需求,可以通过Struts2框架中的拦截器机制进行高效且安全的实现。理解它们的工作原理和区别,有助于提高开发效率和代码质量。

    Spring Boot 实现过滤器、拦截器与切片.docx

    Spring Boot 实现过滤器、拦截器与切片

    spring boot 拦截器拦截/Filter 过滤session案例

    在本文中,我们将深入探讨如何在Spring Boot应用中使用拦截器(Interceptor)和过滤器(Filter)来处理用户的登录session。这两个组件都是Spring框架的重要部分,它们在处理HTTP请求和响应时发挥着关键作用。 首先...

    拦截器过滤器.rar

    "拦截器过滤器.rar"这个压缩包文件很可能包含了一些示例代码或教程,教你如何在Web应用程序中实现请求和响应的过滤与拦截。让我们深入探讨这两种技术。 1. **拦截器(Interceptor)** 拦截器通常在基于MVC(Model-...

    简单理解Struts2中拦截器与过滤器的区别及执行顺序

    Struts2 中的拦截器(Interceptor)和过滤器(Filter)是两个不同的概念,虽然它们都可以影响请求的处理过程,但它们的作用域、执行顺序和实现机制都有所不同。 拦截器(Interceptor) 拦截器是 Struts2 框架中的...

    详谈springboot过滤器和拦截器的实现及区别

    System.out.println("拦截器实现"); return true; } ``` 在上面的代码中,我们在 preHandle() 方法中输出了一条信息,以便了解拦截器的执行过程。 三、Filter 和 Interceptor 的区别 Filter 和 Interceptor 都...

Global site tag (gtag.js) - Google Analytics