SpringBoot框架下使用过滤器Filter

SpringBoot框架下使用过滤器Filter

Java过滤器能够对目标资源的请求和响应进行截取。

过滤器的配置比较简单,直接实现Filter 接口即可,也可以通过@WebFilter注解实现对特定URL拦截,看到Filter 接口中定义了三个方法

  • init() :该方法在容器启动初始化过滤器时被调用,它在 Filter 的整个生命周期只会被调用一次。注意:这个方法必须执行成功,否则过滤器会不起作用。
  • doFilter() :容器中的每一次请求都会调用该方法, FilterChain 用来调用下一个过滤器 Filter。
  • destroy(): 当容器销毁 过滤器实例时调用该方法,一般在方法中销毁或关闭资源,在过滤器 Filter 的整个生命周期也只会被调用一次

1. 第一种方式:注解的方式@WebFilter,@ServletComponentScan

1.1 创建过滤器

定义一个拦截器类实现Filter接口实现doFilter方法(每一次请求都会调用)

src/main/java/com/guo/springboot/filter/MyFilter.java

package com.guo.springboot.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter(urlPatterns = "/myfilter")
public class MyFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("------进入过滤器--------");
        filterChain.doFilter(servletRequest,servletResponse);
    }
}

1.2 SpringBoot入口类开启包扫描

SpringBoot程序入口类,配置扫描包注解

src/main/java/com/guo/springboot/Application.java

package com.guo.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
@SpringBootApplication
@ServletComponentScan(basePackages = "com.guo.springboot.filter")
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

1.3 结果分析

这里只是一个URL请求的过滤,没有制作的请求的页面所以这里请求404找不到页面,咱们目的是测试请求的过滤,,看程序。
在这里插入图片描述
控制台这里打印出过滤器的逻辑处理结果,很很明显过滤了本次请求
在这里插入图片描述

2. 第二种方式:配置类组件FilterRegistrationBean

在这里插入图片描述

2.1 创建过滤器

创建过滤器类实现Filter接口,重写doFilter方法

src/main/java/cosm/guo/springboot/filter/MyFilter.java

package com.guo.springboot.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

public class MyFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("------进入过滤器--------");
        filterChain.doFilter(servletRequest,servletResponse);
    }
}

2.2 配置类——配置过滤器

配置类——配置过滤器的拦截URL

src/main/java/com/guo/springboot/config/FilterConfig.java

package com.guo.springboot.config;

import com.guo.springboot.filter.MyFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration   //定义此类为配置类
public class FilterConfig {
    @Bean
    public FilterRegistrationBean myFilterRegistrationBean(){
        //注册过滤器
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new MyFilter());
        //添加过滤路径
        filterRegistrationBean.addUrlPatterns("/user/*");
        return filterRegistrationBean;
    }
}

2.3 创建控制层

控制层

src/main/java/com/guo/springboot/controller/UserController.java

package com.guo.springboot.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class UserController {
    @RequestMapping("/user/detail")
    public @ResponseBody String userDetail(){
        return "UserDetail";
    }
    @RequestMapping("/center")
    public @ResponseBody String center(){
        return "center";
    }
}

2.4 结果分析

在这里插入图片描述

过滤器配置的过滤路径是/user/*,这里的请求路径是/user/detail,这里成功被过滤了

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spring Boot 中可以使用 OWASP 的 ESAPI(Enterprise Security API)框架来实现 XSS 过滤。ESAPI 是一个开源的安全框架,提供了一系列用于防范各种常见的 Web 安全攻击的 API 和工具。 以下是在 Spring Boot 中使用 ESAPI 进行 XSS 过滤的示例: 1. 添加 ESAPI 依赖: ```xml <dependency> <groupId>org.owasp.esapi</groupId> <artifactId>esapi</artifactId> <version>2.2.0.0</version> </dependency> ``` 2. 创建 ESAPI 过滤器: ```java import org.owasp.esapi.ESAPI; import org.owasp.esapi.filters.ESAPIFilter; public class XssFilter extends ESAPIFilter { @Override public String process(String paramString) { String cleanParamString = super.process(paramString); return ESAPI.encoder().canonicalize(cleanParamString); } } ``` 3. 在 Spring Boot 中注册 ESAPI 过滤器: ```java import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class AppConfig { @Bean public FilterRegistrationBean<XssFilter> filterRegistrationBean() { FilterRegistrationBean<XssFilter> registrationBean = new FilterRegistrationBean<>(); registrationBean.setFilter(new XssFilter()); registrationBean.addUrlPatterns("/*"); registrationBean.setName("xssFilter"); registrationBean.setOrder(1); return registrationBean; } } ``` 通过以上步骤,就可以在 Spring Boot 应用程序中使用 ESAPI 过滤器对所有请求的参数进行 XSS 过滤。需要注意的是,ESAPI 过滤器只是防御 XSS 攻击的一种措施,为了提高 Web 应用程序的安全性,还需要采取其他安全措施,比如 CSRF 防御、SQL 注入防御等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

848698119

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值