Google App Engine - 仅对POST方法应用安全约束?

时间:2014-08-01 17:17:18

标签: java google-app-engine authentication servlets authorization

我正在使用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方法。

非常感谢任何帮助。

1 个答案:

答案 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拆分为单独的文件。