tomcat - 在 Tomcat 中使用 CORS 进行摘要式身份验证

标签 tomcat cors servlet-filters digest-authentication security-constraint

现在我正在构建一个在 Tomcat 8 上运行的 rest api,它使用 Apache 的 CorsFilter 来允许我在我的 web.xml 中设置的跨域请求:

<filter>
    <filter-name>CorsFilter</filter-name>
    <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>CorsFilter</filter-name>
    <url-pattern>/webapi/*</url-pattern>
</filter-mapping>

到目前为止很容易,现在我想向我的 Rest-API 添加 DIGEST 身份验证,是的,digest 不是基本的!

为了简单使用,我想在 web.xml 中使用安全约束:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>all</web-resource-name>
        <url-pattern>/webapi/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>*</role-name>
    </auth-constraint>
</security-constraint>

<login-config>
    <auth-method>DIGEST</auth-method>
    <realm-name>UserDatabase</realm-name>
</login-config>

身份验证和 CORS 过滤器本身可以正常工作,但这里开始出现问题: 安全约束在 CORS 过滤器之前由 servlet 容器执行。 因此,身份验证算法不会在 Digest 身份验证 header 中设置所需的 CORS(跨域请求 header ),因此 CORS 请求将在身份验证时失败,因为摘要 401 页面带有“challange”(nonce,qop,领域等)缺少跨域请求的必要 header 。 现在有人解决这个问题吗?还是因为 CORS,我真的需要实现自己的摘要过滤器?!

最佳答案

您可以尝试将 CorsFilter 重新实现为 Tomcat valve并确保它配置为在 Digest Authenticator Valve 之前运行.

关于tomcat - 在 Tomcat 中使用 CORS 进行摘要式身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33464776/

相关文章:

python - 如何在 CherryPy 中设置 CORS

java - 带有变量的 Servlet 映射(Tomcat 7.0)

java - Wildfly "Lazy-Inits"过滤器,我可以更改吗?

spring - IntelliJ 中未找到应用服务器库

线程池增加时 Apache Tomcat 线程处于等待状态

c# - .Net Core 配置 CORS 以同时允许所有子域和所有 localhost 端口

jquery - 是否有一个 jQuery 解决方案,在可用时使用 CORS,并在 MSIE 上使用 XDomainRequest,在浏览器上使用 niether 时使用 JSONP?

java - 如何在 Java 中重定向请求时在 HTTP header 中传递数据

tomcat - 注销时如何防止tomcat服务器关闭?

java.net.ConnectException : Connection refused apache mysql