0

现在我正在构建一个在 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 身份验证,是的,不是基本的摘要!

为了简单的使用,我想在 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 过滤器本身可以正常工作,但这里开始出现问题:安全约束由 servlet 容器在 CORS 过滤器之前执行。因此,身份验证算法没有在摘要身份验证标头处设置所需的 CORS(跨域请求标头),因此 CORS 请求将在身份验证时失败,因为摘要 401 页面带有“挑战”(nonce,qop,领域等)缺少跨域请求的必要标头。现在有没有人解决或实施该问题?还是因为 CORS,我真的需要实现自己的摘要过滤器?!

4

1 回答 1

0

您可以尝试将其重新实现CorsFilter为 Tomcat阀门,并确保将其配置为在Digest Authenticator Valve之前运行。

于 2015-11-01T18:59:19.070 回答