Spring Boot 知识笔记(Filter过滤器)

  Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息、过滤不安全的输入等一些高级功能。
  Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter。通过Filter技术,开发人员可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截,如下所示:

  

 

举例:

1、创建一个Get restful接口

    @GetMapping(value="/v2/get_user_info")
    public Object getUserInfo(String name,int age){
        return "name:"+name+"\n"+"age:"+age;
    }

2、创建一个filter,判断上述的name参数值是否等于admin,等于admin正常返回,不等于admin,重定向到myerror.html

复制代码
package net.Eleven.demo.filter;



import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;


//@Component
//@ServletComponentScan
@WebFilter(urlPatterns = "/v2/*",filterName = "loginFilter")

public class LoginFilter implements Filter {
    //容器加载时被调用
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("init loginFilter");
    }
    //请求被拦截的时候调用
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        String username = request.getParameter("name");
        if ("admin".equals(username)){
            filterChain.doFilter(servletRequest,servletResponse);
        }
        else {
            response.sendRedirect("/myerror.html");

        }
    }
    @Override
    public void destroy() {
        System.out.println("destroy loginFiler");
        return;

    }
}
复制代码
  • 创建的filter要使用@WebFilter(urlPatterns = "/v2/*",filterName = "loginFilter")注解,urlPatterns支持正则,filtName表示filter的名称
  • 创建的filter要实现Filter接口,并重写Filter接口的三个方法

3、执行结果

 

 

 

posted @   Eleven_Liu  阅读(450)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
点击右上角即可分享
微信分享提示