如何在GWT中使页面不安全

时间:2015-04-09 06:56:58

标签: java java-ee gwt

我有一个名为“客户注册”页面的页面,无需验证/登录即可访问(非安全)。通常我可以定义特定于JSP或HTML页面的安全约束。但在我的GWT应用程序中,我使用Composite类和ui.xml作为模板。

这就是链接的样子 http://127.0.0.1:8888/MyProject.html?gwt.codesvr=localhost:9997#Customer%20Signup

这是我的web.xml

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Secure section</web-resource-name>
        <description />
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <description />
        <role-name>ROLE_ADMIN</role-name>
    </auth-constraint>
</security-constraint>

1 个答案:

答案 0 :(得分:0)

您可以使用宽松的<auth-constraint>(或无)设置添加其他安全约束。 URL模式必须比保护模式更具体。

所以,这应该有效:

<security-constraint>
<web-resource-collection>
    <web-resource-name>Secure section</web-resource-name>
    <description />
    <url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
    <description />
    <role-name>ROLE_ADMIN</role-name>
</auth-constraint>
</security-constraint>

<security-constraint>
<web-resource-collection>
    <web-resource-name>Secure section</web-resource-name>
    <description />
    <url-pattern>/signup.jsp</url-pattern>
</web-resource-collection>
</security-constraint>

第二个约束优先于signup.jsp页面上的第一个约束,因为它更具体。我从未尝试将url-pattern扩展到位置定义,即#符号之后,但我认为这不起作用,因为请求参数在前面。因此,您应该为注册创建一个新页面。

J2EE文档在这里指定了部分,并且URL模式被称为与request-URI匹配,而request-URI又是主机名/端口之后的部分 - 因此它应该包含片段。鉴于此,匹配路径中的锚点应该。 http://docs.oracle.com/cd/E19798-01/821-1841/bncbk/index.htmlhttp://tools.ietf.org/html/rfc7230#page-17

更新:也许我对你有所了解:如果我找到了你,你需要一个登录页面作为应用程序的一部分。这里的问题是,您对整个应用程序具有相同的URI。但是,您可以使用url-pattern保护后端服务,以便在未设置凭据的情况下无法使用后端。

在这种情况下,您的登录页面已加载,应用程序将调用服务器以进行初始数据加载。数据加载将失败,因为您尚未登录。onFailure代码必须识别特殊故障(无凭证)并显示登录视图。 登录视图将调用未受保护(或排除)的后端servlet进行登录,并在会话中准备用户凭据。

然后返回到应用程序中的初始位置,现在会话中有适当的用户,您的后端呼叫将成功。

那应该可以解决问题。