java - 如何使 CORS 过滤器在具有基本身份验证的 Jersey REST 中工作?

标签 java tomcat jersey cors basic-authentication

我正在尝试使用具有基本身份验证的 Tomcat 在 Jersey 上实现 cors。 身份验证是使用领域配置的,它获取数据库的数据并与给定的用户进行比较并通过。

我的所有资源都在没有跨源 HTTP 请求的情况下正常工作,我已经使用 Soapui 和我自己制作的 Android 应用程序进行了测试。 当我尝试使用 jQuery 和 ajax 使用 REST web 服务时出现问题,它发送一个没有任何身份验证数据的选项预检,并且服务器响应 401 未经授权的错误。

我已尝试执行以下操作:

*实现自定义容器过滤器来处理该 cors 请求,但什么也不做。 按照网站的建议使用 catalina cors 过滤器 http://enable-cors.org , 什么都没有。

*使用由以下人员开发的 cors 过滤器:http://software.dzhuvinov.com/cors-filter.html .什么都没有。

*使用servlet规范的过滤器,带和不带WebFilter注解,什么都不带。

*使用@PermitAll 注释创建选项服务。

在所有这些尝试中,我也配置了 web.xml。 我正在使用 Tomcat 7.0.21、Jersey 2.22.2、Hibernate、MYSQL、JDK 7 和 Maven。

我认为基本身份验证是问题所在,也许我应该尝试 OAuth 2.0?有没有办法让 cors 与 Basic Auth 一起工作? 如何进行?

最佳答案

对我来说最简单的方法是执行以下操作:

1) 将此代码添加到您的 web.xml 中,靠近 <web-app .. > 内部的顶部标签

 <filter>
    <filter-name>CORS</filter-name>
    <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
</filter>
<filter-mapping>
        <filter-name>CORS</filter-name>
        <url-pattern>/*</url-pattern>
</filter-mapping>

2) 在pom.xml

中通过maven导入两个库
<dependency>
    <groupId>com.thetransactioncompany</groupId>
    <artifactId>java-property-utils</artifactId>
    <version>1.9.1</version>
</dependency>

<dependency>
    <groupId>com.thetransactioncompany</groupId>
    <artifactId>cors-filter</artifactId>
    <version>1.9.1</version>
</dependency>

祝你好运!

关于java - 如何使 CORS 过滤器在具有基本身份验证的 Jersey REST 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36438245/

相关文章:

java - 使用连接池的 Select SQL 的准备语句

java - 使用自定义身份验证了解 Spring Security 中的 "Access Denied"

tomcat - 将项目 jar 部署到使用 maven cargo plugin 启动的运行容器时出现问题

javascript - 如何让服务器返回一个 html 文件?

java - 使用 Terracotta 对 Glassfish Web session 进行集群

java - 找不到符号类 MakeText 错误

java - SimpleDateFormat:无法解析的日期 MMMM yyyy

java - Tomcat 7.0 启动时抛出错误

java.lang.NoSuchMethodError : javax. el.ExpressionFactory.newInstance()Ljavax/el/ExpressionFactory;

java - 如何在 OSGi 上使用 Jersey 解析 jersey.internal.RuntimeDelegateImpl