如何对所有子位置强制执行https连接? JAX-RS JBoss

时间:2013-05-05 14:34:58

标签: ssl jboss jax-rs enforcement security-constraint

以下部分应强制所有客户端使用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-pattern>/services/*</url-pattern>这样的网址模式无法完成这项工作。

为什么<url-pattern>/*</url-pattern>不适用于subloacations。有办法解决这个问题吗?

1 个答案:

答案 0 :(得分: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>,并且一切都得到妥善保护。在我看来,这更合理!