springboot配置过滤器和基本使用逻辑

目前正在学习Java,想把一些学习过程中的点点滴滴记录下来,一个原因是方便自己以后使用,另一个原因是巩固一下自己的学习成果和大家分享!!

下面我把我做过的一个springboot配置过滤器的案例分享给大家

Filter是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理。使用Filter的完整流程:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。

1、首先在项目启动类中添加@ServletComponentScan注解进行扫描

@SpringBootApplication
@ServletComponentScan
public class DemoProjectApplication {

	//启动类逻辑省略

}

2、在包目录下创建LoginFilter文件,并且实现Filter

public class LoginFilter implements Filter {
}

3、按住ctrl+o实现Filter里面的这三个方法

public class LoginFilter implements Filter {
    /**
     * 容器加载时
     *
     * @param filterConfig
     * @throws ServletException
     */
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void destroy() {

    }

    /**
     * 容器销毁时
     *
     * @param servletRequest
     * @param servletResponse
     * @param filterChain
     * @throws IOException
     * @throws ServletException
     */
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

    }
}

 4、添加过滤器的注解@WebFilter,参数配置如下(注意:urlPatterns是拦截规则,⽀持正则,在此添加需要过滤的路径)

@WebFilter(urlPatterns = "/api/v1/pri/*", filterName = "loginFilter")//路径为测试路径
public class LoginFilter implements Filter {
  
//      刚才实现的三个方法省略

}

5、通过控制chain.doFilter的⽅法的调⽤,来实现是否通过放⾏(可以通过判断逻辑使用)

      这是一个简单的逻辑,通过判断Token是否为空来过滤掉未登录的用户,仅供参考!!!

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("doFilter LoginFilter======");
        if(getToken != null){
            filterChain.doFilter(servletRequest, servletResponse);
        }else{
            return "没有登录,请登录";
        }
    }

6、下面我们来测试一下过滤器是否创建成功,我们在每一个方法体内都输出对应的一句话

public class LoginFilter implements Filter {

    /**
     * 容器加载的时候
     *
     * @param filterConfig
     * @throws ServletException
     */
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("init LoginFilter======");
    }

    /**
     * 容器执行的时候
     * @param servletRequest
     * @param servletResponse
     * @param filterChain
     * @throws IOException
     * @throws ServletException
     */
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("doFilter LoginFilter======");

    }
    /**
     * 容器销毁的时候
     */
    @Override
    public void destroy() {
        System.out.println("destroy LoginFilter======");
    }
}

 然后启动springboot项目,我们可以看到当容器加载的时候init方法已经执行了

当我们关闭项目时,它又会执行销毁操作

为什么这里没有执行doFilter方法呢,因为我们这里没有写代码的逻辑,如果想让容器执行并且实现doFile里面的逻辑,我们需要在第4步添加我们的拦截路径,然后在过滤器里面写自己的逻辑就OK啦。


使用场景:多用于权限控制、⽤户登录状态控制等......

如果大家还有不懂或者有疑问的地方,欢迎多多交流哇。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值