【问题标题】:How to make a page non secure in GWT如何在 GWT 中使页面不安全
【发布时间】:2015-06-14 10:09:12
【问题描述】:

我有一个名为“客户注册”页面的页面,无需身份验证/登录即可访问(不安全)。通常我可以定义一个特定于 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>

【问题讨论】:

  • 如果我理解正确,您想从约束中排除应用程序中的一个页面或路径吗?您不想将 url 模式更改为 /secure/* 而是向 /insecure/* 路径添加排除项,对吗?
  • 是的,我想排除一页。但我在 GWT 中担心的是我没有 JSP 页面。该页面实际上是用 Java 编写的(使用 Composite 或 Widget 类)所以我不确定如何在 web.xml 中定义 URL 模式
  • 页面嵌入在 jsp 或 Html 或任何作为 javascript 脚本标签中。这会加载所谓的端点。那是您需要排除的uri。作为提示,只需查看浏览器的地址栏
  • 您好,抱歉回复晚了。我刚刚创建了一个新模块并将我的页面放在那里。该模块通过安全约束设置为不安全。

标签: java jakarta-ee gwt


【解决方案1】:

您可以使用宽松的&lt;auth-constraint&gt;(或无)设置添加另一个安全约束。 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 模式扩展到位置定义,即在 # 符号之后,但我想这不起作用,因为请求参数在前面。因此,您应该为注册创建一个新页面。

J2EE 文档在此处指定了该部分,并且据说 URL 模式与请求 URI 匹配,而请求 URI 又是主机名/端口之后的部分 - 所以它应该包括片段。鉴于此,匹配路径中的锚点应该毕竟可以工作。 http://docs.oracle.com/cd/E19798-01/821-1841/bncbk/index.htmlhttps://www.rfc-editor.org/rfc/rfc7230#page-17

更新:也许我有一个想法给你:如果我猜对了,你想要一个登录页面,它是应用程序的一部分。这里的问题是,整个应用程序都有相同的 URI。但是您可以使用 url-pattern 保护您的后端服务,这样您就无法在没有设置凭据的情况下使用后端。

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

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

这应该可以解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    • 2011-04-06
    相关资源
    最近更新 更多