当前位置: 首页 > 知识库问答 >
问题:

请解释Spring Boot中的飞行前过滤器代码

尹弘壮
2023-03-14

我在Spring boot中有一些关于飞行前过滤器的代码,但我不知道这段代码的用途:

@Component
// We want to put this in front of SpringSessionFilter
@Order(Ordered.HIGHEST_PRECEDENCE)
public class RequestFilter {

    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;

        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with, x-auth-token");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Credentials", "true");

        if(!(request.getMethod().equalsIgnoreCase("OPTIONS"))) {
            try {
                chain.doFilter(req, res);
            } catch (Exception e) {
                e.printStackTrace();
            }
        } else {
            System.out.println("Pre-fight");
            response.setHeader("Access-Control-Allowed-Methods", "POST, GET, DELETE");
            response.setHeader("Access-Control-Max-Age", "3600");
            response.setHeader("Access-Control-Allow-Headers", "authorization, content-type, x-auth-token, " +
                    "access-control-request-headers,access-control-request-method,accept,origin,authorization,x-requested-with");
            response.setStatus(HttpServletResponse.SC_OK);
        }
    }

    public void init(FilterConfig filterConfig) {}

    public void destroy() {}

}

这是该文件的解释:

因此,当Angular 2发送http post ajax调用时,它将首先发送一个pre-flight并且方法类型不是“post”而是“Options”。如果这个预飞行有一个有效的响应,那么它将开始发送真正的http POST。这是为了防止跨站点攻击。在后端,spring对此没有开箱即用的处理。所以我们需要检查http方法是否是一个预置。如果是的话,我们只会用有效的头和信息来响应。如果没有,我们将继续过滤链。

但我看不懂源代码。谁能为我解释?

共有1个答案

贝滨海
2023-03-14

为什么响应.setheader(“access-control-allow-origin”,“*”);?

跨源资源共享(CORS)是一种允许限制在web浏览器中实现的资源的安全概念。它防止JavaScript代码产生或使用不同来源的请求。

例如,您的web应用程序正在8080端口上运行,而通过使用JavaScript,您试图从9090端口使用RESTful web服务。在这种情况下,您将面临跨源资源共享安全问题在您的web浏览器。要授予访问权限,您可以将其设置为*或使用您的域

CORS预飞行请求是检查CORS协议是否被理解的CORS请求。

它是一个选项请求,使用了三个HTTP请求头:access-control-request-method,Access-Control-Request-Headers和Origin header

预飞行请求是浏览器在需要时发出的自动。在正常情况下,前端开发人员不需要自己创建这样的请求。

例如,客户端可能在发送删除请求之前询问服务器是否允许DELETE请求,方法是使用预飞行请求:

OPTIONS /resource/foo 
Access-Control-Request-Method: DELETE 
Access-Control-Request-Headers: origin, x-requested-with
Origin: https://foo.bar.org

如果服务器允许,那么它将使用Access-Control-Allow-Methods响应头响应预飞行请求,其中列出delete:

HTTP/1.1 204 No Content
Connection: keep-alive
Access-Control-Allow-Origin: https://foo.bar.org
Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE
Access-Control-Max-Age: 86400

什么是FilterChain?

FilterChain筛选器

 类似资料:
  • 问题内容: 我开发了一个PhoneGap应用程序,现在将其转换为移动网站。除了一处小故障,一切都可以顺利进行。我通过POST请求使用了某个第三方API,该API在该应用中可以正常运行,但在移动网站版本中却无法运行。 仔细查看后,似乎AngularJS(我想实际上是浏览器)正在首先发送OPTIONS请求。今天,我对CORS有了很多了解,但似乎无法弄清楚如何完全禁用它。我没有访问该API的权限(因此无

  • 我需要添加CORS过滤器到我的Spring Boot web应用程序。 我添加了CORS映射,如下文所述http://docs.spring.io/spring/docs/current/spring-framework-reference/html/CORS.html 这是我的配置:

  • 我将在一个已经存在的网站中介绍Spring Web Security。现在出现了一个问题: 我希望我的自定义筛选器在Spring Security筛选器链之前在Tomcat筛选器链中执行。我不想让他们成为这个Spring安全过滤器链的一部分。 我所找到的只是Spring Boot中的一个解决方案(请参见“Spring-How to insert a filter before SpringSecu

  • 主要内容:1.maven仓库,2.过滤器,3.拦截器,4.监听器,5.实例化,6.测试,7.拦截器与过滤器的区别1.maven仓库 2.过滤器 过滤器的英文名称为 Filter, 是 Servlet 技术中最实用的技术。 如同它的名字一样,过滤器是处于客户端和服务器资源文件之间的一道过滤网,帮助我们过滤掉一些不符合要求的请求,通常用作 Session 校验,判断用户权限,如果不符合设定条件,则会被拦截到特殊的地址或者基于特殊的响应。 3.拦截器 Java中的拦截器是动态拦截 action 调用的

  • 问题内容: 为简单起见,请设想这种情况,我们有一台2位计算机,它具有一对称为r1和r2的2位寄存器,并且仅适用于立即寻址。 假设位序列 00 表示 添加 到我们的CPU中。也 01 的装置将数据移动到R 1和 10组 的装置将数据移动到R2。 因此,这台计算机和一个汇编器都有一种汇编语言,其中的示例代码将像 简而言之,当我将此代码汇编成本地语言时,文件将类似于: 上面的12位是以下代码的本机代码:

  • 本文向大家介绍AngularJS过滤器详解及示例代码,包括了AngularJS过滤器详解及示例代码的使用技巧和注意事项,需要的朋友参考一下 过滤器是用来更改修改数据,并且可以在表达式或使用管道符指令将其归入。以下是常用的过滤器的列表。 S.No. 名称 描述 1 大写 转换文本为大写文本。 2 小写 转换文本为小写文本。 3 货币 货币格式格式文本。 4 过滤器 过滤数组中它根据所提供的标准的一个