springboot项目中利用@WebFilter注解和@Bean配置类两种方式实现Filter过滤器

过滤器(Filter)
过滤器实际上就是对web资源进行拦截,做一些处理后再交给下一个过滤器或servlet处理。通常都是用来拦截request进行处理的,也可以对返回的response进行拦截处理
在这里插入图片描述
springboot项目中实现过滤器的两种方式:
1.注解 @WebFilter
2.配置类

本项目目标:过滤器对于前端模拟登录的请求,判断其name参数是user或者admin,则登陆成功。

第一种:注解 @WebFilter实现过滤器

项目结构如图:(先不关注MyFilterConfig类,这是配置类,下面第二种实现方式会用到)

  • 启动类:TestFilterApplication
  • 控制层:MyController(两个模拟登录接口)
  • 过滤器:MyFilter

在这里插入图片描述

1.1、准备工作:创建启动类,配置文件,引如依赖

依赖就一个:spring-boot-starter-web,里面包含了filter的包,不需要单独引入了
filter在tomcat的包里:
在这里插入图片描述
依赖spring-boot-starter-web

        <!--web的起步依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
1.2、控制层:MyController.class

模拟登录:

package com.tzq.testFilter.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Author tangzhiqian
 * @CreateTime 2021/6/9 13:40
 */
@RestController
@RequestMapping("/login")
public class MyController {


    @GetMapping("/user")
    public String userLogin(String name){
        return  name+"登陸成功!!!";
    }

    @GetMapping("/admin")
    public String adminLogin(String name){
        return  name+"登陸成功!!!";
    }

}

1.3、新建过滤器Filter类

主要是 利用注解来实现:
@WebFilter(urlPatterns = “/login/*”, filterName = “MyTestFilter”)

package com.tzq.testFilter.filter;

import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;


/**
 * @Author tangzhiqian
 * @CreateTime 2021/6/9 13:29
 */

@WebFilter(urlPatterns = "/login/*", filterName = "MyTestFilter")
@Component
public class MyFilter implements Filter {


    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

        HttpServletRequest request = (HttpServletRequest) servletRequest;

        String name = request.getParameter("name");
        if ("user".equals(name) || "admin".equals(name)) {
            System.out.println("登錄成功!!!");
            filterChain.doFilter(servletRequest, servletResponse);
        } else {

            System.out.println("登錄失敗");
        }
    }
}

Filter解释:
在这里插入图片描述
到这里,过滤器就建好了

1.4、运行

运行:http://localhost:8076/login/admin?name=admin
在这里插入图片描述
运行:http://localhost:8076/login/admin?name=aaa
在这里插入图片描述

name参数为admin,登录成功!参数为aaa,空白,登录失败!

第二种:配置类实现过滤器

使用配置类的时候,我把注解@WebFilter注释掉!
新建配置类:MyFilterConfig.class

package com.tzq.testFilter.filter;

import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.ArrayList;
import java.util.List;


/**
 * @Author tangzhiqian
 * @CreateTime 2021/6/9 15:25
 */
@Configuration
public class MyFilterConfig {

    @Bean
    FilterRegistrationBean myFilterRegistration() {

        //创建配置bean对象,并指定->过滤器
        FilterRegistrationBean registration = new FilterRegistrationBean(new MyFilter());

        List<String> urlPatterns = new ArrayList<>();
        urlPatterns.add("/login/*");

        //添加需要过滤的url
        registration.setUrlPatterns(urlPatterns);

        return registration;
    }

}

MyFilterConfig代码解析:
在这里插入图片描述
经测试,同样可以实现过滤器!

  • 27
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 27
    评论
Spring Boot项目,要将Filter过滤器声明为启动,有以下两种方式: 1. 使用@WebFilter注解 通过在Filter上标记`@WebFilter`注解来声明Filter过滤器。这个注解是Servlet 3.0规范的一部分,并且Spring Boot支持它。在注解可指定该过滤器的URL模式以及过滤器在容器的执行顺序。 示例代码如下: ```java import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException; @WebFilter(filterName = "myFilter", urlPatterns = "/*") public class MyFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("Filter init"); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("Filter doFilter"); filterChain.doFilter(servletRequest, servletResponse); } @Override public void destroy() { System.out.println("Filter destroy"); } } ``` 2. 使用FilterRegistrationBean 另一种方式是使用Spring Boot提供的FilterRegistrationBeanFilter过滤器进行注册。 示例代码如下: ```java import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.servlet.Filter; @Configuration public class MyFilterConfig { @Bean public FilterRegistrationBean<Filter> myFilter() { FilterRegistrationBean<Filter> registrationBean = new FilterRegistrationBean<>(); registrationBean.setFilter(new MyFilter()); registrationBean.addUrlPatterns("/*"); registrationBean.setName("myFilter"); registrationBean.setOrder(1); return registrationBean; } } ``` 这里使用Java Config的方式声明Filter过滤器。在`myFilter()`方法,创建了一个FilterRegistrationBean对象,并设置其Filter、URL模式、名称和执行顺序。最后返回这个对象即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值