我有一个名为“客户注册”页面的页面,无需验证/登录即可访问(非安全)。通常我可以定义特定于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>
答案 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.html和http://tools.ietf.org/html/rfc7230#page-17
更新:也许我对你有所了解:如果我找到了你,你需要一个登录页面作为应用程序的一部分。这里的问题是,您对整个应用程序具有相同的URI。但是,您可以使用url-pattern保护后端服务,以便在未设置凭据的情况下无法使用后端。
在这种情况下,您的登录页面已加载,应用程序将调用服务器以进行初始数据加载。数据加载将失败,因为您尚未登录。onFailure
代码必须识别特殊故障(无凭证)并显示登录视图。
登录视图将调用未受保护(或排除)的后端servlet进行登录,并在会话中准备用户凭据。
然后返回到应用程序中的初始位置,现在会话中有适当的用户,您的后端呼叫将成功。
那应该可以解决问题。