0

以下部分应强制所有客户端使用 https 连接。

<security-constraint>
    <web-resource-collection>
        <web-resource-name>securedapp</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
    </user-data-constraint>
</security-constraint>

实际发生的是只有 index.html 页面受 ssl 保护。所以像:这样的请求http://localhost/JAX-RS_Service/被重定向到https://localhost/JAX-RS_Service/并显示 index.html 页面。但是http://localhost/JAX-RS_Service/index.html ,如果我尝试请求http://localhost/JAX-RS_Service/services/customers/1,则不会重定向到 https,因此所有内容都以明文形式通过网络发送。

执行身份验证也是如此

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Authenticated customers only</web-resource-name>
        <url-pattern>/services/customers/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>CUST</role-name>
    </auth-constraint>
</security-constraint>

像这样的 url 模式<url-pattern>/services/*</url-pattern>不会完成这项工作。

为什么不<url-pattern>/*</url-pattern>为子定位工作。有没有办法解决这个问题?

4

1 回答 1

0

其实我不知道为什么,但下面的配置解决了我的问题。

    <security-constraint>
    <web-resource-collection>
        <web-resource-name>SSL Secured WebService</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
    </user-data-constraint>
</security-constraint>

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Authenticated customers only</web-resource-name>
        <url-pattern>/services/customers/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>CUST</role-name>
    </auth-constraint>
    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
    </user-data-constraint>
</security-constraint>

<user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint>需要在每个中添加,否则<security-constraint>它将不适用于 JBoss。有趣的是,对于 Tomcat,您必须定义<transport-guarantee>CONFIDENTIAL</transport-guarantee>一次,<url-pattern>/*</url-pattern>并且一切都得到妥善保护。在我看来,这更合理!

于 2013-05-18T23:51:38.777 回答