为具有凭据支持的 tomcat 应用程序启用 CORS

2023-11-24

我的服务器上有一个从 IIS 运行的简单 GWT 应用程序。我正在尝试测试对同一服务器上运行的 tomcat 的 HTTP 请求。但是,由于两个应用程序服务器都在不同的端口上运行,因此我的浏览器(chrome 和 firefox)将请求视为 CORS 请求。

为了使tomcat能够接受CORS请求,我将其更新到Tomcat 7.0.52并在全局web.xml配置中启用了CORS过滤器。我测试了这个简单的设置,它似乎有效。 GWT 中的代码如下:

        String url = "http://bavarians:8080/";
        RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, url);
        box.setText(url);
        try
        {
            rb.sendRequest("", new RequestCallback(){

                @Override
                public void onResponseReceived(Request request, Response response)
                {
                    Window.alert(response.getStatusCode() + response.getStatusText());
                }

                @Override
                public void onError(Request request, Throwable exception)
                {
                    Window.alert("Request failed");

                }});
        }
        catch (RequestException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

这是与其关联的 CORS 过滤器:

<filter>
  <filter-name>CorsFilter</filter-name>
  <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
  <init-param>
    <param-name>cors.allowed.origins</param-name>
    <param-value>http://bavarians</param-value>
  </init-param>
  <init-param>
    <param-name>cors.allowed.methods</param-name>
    <param-value>GET,POST,HEAD,OPTIONS,PUT</param-value>
  </init-param>
  <init-param>
    <param-name>cors.allowed.headers</param-name>
    <param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers, Authorization</param-value>
  </init-param>
  <init-param>
    <param-name>cors.exposed.headers</param-name>
    <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials, Authorization</param-value>
  </init-param>
  <init-param>
    <param-name>cors.support.credentials</param-name>
    <param-value>true</param-value>
  </init-param>
  <init-param>
    <param-name>cors.preflight.maxage</param-name>
    <param-value>10</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>CorsFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

With this setup, I get a 200 OK response from tomcat. So its safe to assume that CORS filter is working. To back this up, I took a fiddler trace and all looked good. Fiddler trace with the above setup

现在,由于我想访问 tomcat(solr) 的应用程序之一,因此我需要使用 CORS 请求进行基本身份验证。这将预检请求带入画面。由于我设置了 CORS 过滤器以启用凭据使用,因此我不需要对其进行任何更改。所以,我对我的代码做了以下更改

        String url = "http://bavarians:8080/solr/select?wt=xml&q=tag_name:abcd&username=domain\\userid";
        RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, url);
        box.setText(url);
        rb.setHeader("Authorization", "Basic YWRtaW46YWRtaW4=");
        rb.setIncludeCredentials(true);

现在,当我尝试使用这段代码时,它进入了onResponseReceived代码块并给出一个值为“0”的警告框。当我进行小提琴跟踪时,我得到了这个:

Fiddler trace with preflight request.

由于我将自定义标头添加到请求中,浏览器发送预检请求是有意义的。但我不明白为什么 tomcat 响应 401 代码,尽管将授权标头添加到其 CORS 过滤器配置中。

如果有任何帮助或回复,我将不胜感激


EDIT:我注意到的另一件事是,如果我的 URL 只是“bavarians:8080/solr/”;,tomcat 会成功授权预检请求,并且紧接着的下一个请求将作为带有 200 OK 响应的普通 GET 请求进行处理。但是如果我输入函数名称并使用 URL 进行查询,我会再次收到 401。从浏览器访问上述 URL 需要基本身份验证。所以CORSFilter直到某个时刻才起作用


凭证不会在预检请求中发送,因此您必须配置 Tomcat 以让请求到达CorsFilter即使未经身份验证。也就是说,你必须声明一个<security-constraint> with <http-method>OPTIONS</http-method> and no <auth-constraint>.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为具有凭据支持的 tomcat 应用程序启用 CORS 的相关文章

随机推荐

  • 在 ggplot 中展开分类 x 轴

    我不知道如何使用expand within scale x discrete 扩展分类 x 轴 以便将标签放置在点的右侧不会脱离绘图 我知道如果 x 是数字 我可以简单地调整 x 的最大限制 以便所有点都向左移动 但是 我无法弄清楚如何使用
  • SQL Server 导入向导将 NULL 视为文字字符串“NULL”

    当我尝试导入 csv以逗号分隔的平面文件转换为Microsoft SQL server 2008R2 64 bit instance for string列aNULL原始数据变成文字字符串 NULL 并在一个numeric列我收到导入错误
  • 内存警告 UIImagepickerController IOS 7

    任何人都可以帮助我解决这个问题吗 我对 Objective C 和 iOS 有点陌生 我一直在研究它 但我不知道如何解决这个问题 我的应用程序非常简单 它只启动相机拍照并通过电子邮件将它们发送到我们的服务器 这段代码在 iOS6 中运行得很
  • jQuery Mobile 导航还是更改页面?

    随着 jQuery Mobile 1 3 的到来 navigate 已添加功能 我听说这是更改页面的推荐方法 而且它们似乎解决了页面之间传输数据的问题 问题是 既然它已经被简化了 我如何访问其他选项changePage提供 我真的很想使用的
  • mongodb 归档格式是什么?

    我已经使用它们的存档选项备份了一些 mongoDB 但我不能简单地解压它们 当我执行一些步骤来解压缩数据时 存档看起来像是一个大文件中的整个数据库 我想获取各个收藏的文件 有没有办法做到这一点 tar xvf valk archive ta
  • 如何将网址中的双斜杠/多斜杠替换为单斜杠

    我有一个像这样的网址 http 127 0 0 1 7000 test test index html 预期输出 http 127 0 0 1 7000 test test index html 我使用这个正则表达式 http 2 输出是
  • 我的 Rails Javascript 清单文件既不编译也不包含任何所需的文件

    我看过一些与此类似的帖子 但没有解决方案 所以我想我会提出一个更有记录的问题 我的问题清单文件中的 JS 不包含或编译任何 JS 当在本地运行我的服务器并打开 JS 文件时 我看不到任何编译内容 只有标准的 application js 清
  • 在 Objective-C 中,在每个类中导入相同的头文件会使编译时间更长吗?

    我是 Objective C iOS 编程的初学者 我想制作一个头文件 其中包含我在项目中使用的所有类头 并在每个类头文件中导入头文件 就像这个问题 在同一个头文件中包含多个类 但这种方法会增加编译时间吗 或者还有什么其他的缺点吗 请告诉我
  • func_num_args、func_get_arg 和 func_get_args 从 php 5.2 到 5.3 的行为差异

    我看过PHP手册 但我不明白 PHP 早期版本和更高版本之间的行为差 异 我不明白这个说法 由于该函数依赖于当前作用域来确定参数详细信息 因此在 5 3 0 之前的版本中不能将其用作函数参数 如果必须传递该值 则应将结果分配给一个变量 然后
  • Python/Tkinter:ModuleNotFoundError:没有名为“_tkinter”的模块

    这是我在 StackOverflow 上发表的第一篇文章 我会尽力使其尽可能正确和完整 如果您有任何改进我的文章的建议 我会很乐意接受 我在运行使用 Tkinter 的 Python 编写的代码时遇到问题 我将尝试详细描述我的操作 以便于识
  • 将 HTML 转义字符解码回 C# 中的正常字符串

    我的问题很简单 我在网上搜索了一下 但找不到一种快速方法来对字符串中的 HTML 文本进行转义 例如 lt gt amp 应以字符串形式返回 有没有一种快速的方法 或者我必须编写自己的 unescaper use System Web Ht
  • 在Android应用程序中获取用户的位置权限[重复]

    这个问题在这里已经有答案了 I m trying to get the users actual location with the typicaly permissions box like this 如果有人知道如何制作 请回答 在运行
  • 无法更新 UITableViewCell 中 UI 对象的框架

    我有一个子类 UITableViewCell 我需要动态更改 UILabel 的框架 这是我所做的 UITableViewCell tableView UITableView tableView cellForRowAtIndexPath
  • XSLT 转换子目录中的多个文件

    我创建了一个可以转换单个 XML 文件的 XSLT 文件 但是 我有数百个包含多个 xml 文件的目录 XSLT 有没有办法转换所有这些文件 我正在使用集合功能来获取所有文件的列表 但是 现在不确定如何应用转换 这是我的示例 XSLT 文件
  • 即使 WooCommerce 中的购物车为空,也可通过 URL 中的 GET 方法应用优惠券折扣

    我有一个插件 可以将倡导者推荐优惠券代码发送到他们输入的电子邮件中 当观众收到这封电子邮件时 我想创建一个流程 他们可以在其中单击电子邮件中的 立即购买 优惠券将自动添加 截至目前 对于 立即购买 按钮下的链接 我已输入以下内容 websi
  • jqGrid (v4.1.2) 树形网格的排序不适用于邻接模型

    我一直在使用 jqGrid 有一些有用的问题 and answers关于邻接模型 除了排序之外 我已经连接并工作了所需的一切 该问题实际上已在上面的答案链接中复制 谁能看到什么需要修复吗 奥列格似乎是这方面的专家 我已经尝试过这个选项que
  • 如何抑制已读回执?

    我正在使用 WebDav 以编程方式 阅读 电子邮件 当我处理完这些电子邮件后 我也会删除这些电子邮件 但是 这引起了一个有趣的问题 每次我删除电子邮件时 原始发件人都会收到未读回复 我已登录 Outlook Web App 并选中该选项不
  • MSBuild:如何创建并使用任务在构建时转换内容项?

    我有一个 Silverlight 3 项目 内容如下
  • 从 Eclipse 导出的 JAR 中排除 JUnit

    我正在使用 Eclipse JUnit 集成 它将 JUnit 库自动包含到我的项目中 问题是当我使用导出项目时可运行的 JAR 文件目的地 它包括 JUnit 有没有办法从导出的 JAR 中排除 JUnit 最好是测试 如果您通过右键单击
  • 为具有凭据支持的 tomcat 应用程序启用 CORS

    我的服务器上有一个从 IIS 运行的简单 GWT 应用程序 我正在尝试测试对同一服务器上运行的 tomcat 的 HTTP 请求 但是 由于两个应用程序服务器都在不同的端口上运行 因此我的浏览器 chrome 和 firefox 将请求视为