我正在使用Java中的GAE构建Web应用程序。我在将web.xml中的<security-constraint>
仅应用于servlet的POST方法时遇到了问题。
以下是我的web.xml的相关部分
<security-constraint>
<web-resource-collection>
<web-resource-name>data</web-resource-name>
<url-pattern>/data</url-pattern>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
所以我只想在调用POST方法时强制执行身份验证。应该允许所有用户使用GET方法。
我测试了上面的代码,它在localhost开发服务器上工作正常。但是当我实际将它部署到App Engine时,它不起作用。它甚至需要对'data'Servlet的GET方法进行身份验证。每当我在上面的URL上尝试GET方法时,我会在响应头中获得一个带有身份验证URL的302响应。似乎GAE正在将安全约束应用于GET和POST方法,而不仅仅是POST方法。
非常感谢任何帮助。
答案 0 :(得分:1)
如果必须POST到同一Java App,则添加单独的url模式。即/ data1。然后将安全约束放在该模式上。我试过这个并且有效:
<servlet-mapping>
<servlet-name>JavaAppName</servlet-name>
<url-pattern>/data</url-pattern>
<url-pattern>/data1</url-pattern>
</servlet-mapping>
<web-resource-collection>
<web-resource-name>JavaAppName</web-resource-name>
<url-pattern>/data1</url-pattern>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
只需确保将HTML POST更新到正确的目标。
理想情况下,您应该将GET和POST拆分为单独的文件。