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

标签 java google-app-engine authentication servlets authorization

我正在使用 Java 中的 GAE 构建一个 Web 应用程序。我在申请 <security-constraint> 时遇到问题在 web.xml 中仅适用于 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 方法。

我测试了上面的代码,它在本地主机开发服务器中运行良好。但当我实际将其部署到 App Engine 时,它​​不起作用。即使“数据”Servlet 的 GET 方法也需要身份验证。每当我在上述 URL 上尝试 GET 方法时,都会收到 302 已找到响应,响应 header 中包含身份验证 URL。看来 GAE 正在将安全约束应用于 GET 和 POST 方法,而不仅仅是 POST 方法。

任何帮助将不胜感激。

最佳答案

如果您必须 POST 到同一个 Java 应用程序,请添加单独的 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 拆分为单独的文件。

关于java - Google App Engine - 仅对 POST 方法应用安全约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25085458/

相关文章:

java - Jetty 6总是生成调试日志?

Java & Redis - jedis.2.0.0.jar 的多个实例

python - 对 App Engine 上的数据库中的所有 float 实体求和

python - 将 http 重定向到 httpsflask + appengine

java - 如何以 root 用户身份运行 tomcat - 为什么 tomcat 通常在自己的用户下运行?

java - 查找和删除数组的重复元素

google-app-engine - google.appengine.ext.ndb 和 gcloud.datastore 之间有什么区别?

Python 请求 : how do I check if a user already logged in or not?

php - 如何通过php代码在mysql服务器上添加用户?

ruby - 重构多个 if 语句以使用子域进行用户身份验证