安全约束在App Engine Standard Java中不起作用

时间:2018-08-15 04:10:15

标签: java google-app-engine google-cloud-platform google-cloud-endpoints-v2

我正在使用App Engine标准环境。我想使所有网址仅访问管理员。

这是我的web.xml,但是这个对我不起作用,我在本地开发中对其进行了测试。

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
         http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

  <welcome-file-list>
    <welcome-file>welcome</welcome-file>
  </welcome-file-list>

  <!-- OBJECTIFY -->
  <filter>
    <filter-name>ObjectifyFilter</filter-name>
    <filter-class>com.googlecode.objectify.ObjectifyFilter</filter-class>
  </filter>
    <filter-mapping>
        <filter-name>ObjectifyFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

  <!-- ENDPOINTS -->
  <servlet>
        <servlet-name>EndpointsServlet</servlet-name>
        <servlet-class>com.google.api.server.spi.EndpointsServlet</servlet-class>
        <init-param>
            <param-name>services</param-name>
            <param-value>
                org.example.test.API.Account
            </param-value>
        </init-param>
    </servlet>
    <!-- Route API method requests to the backend. -->
    <servlet-mapping>
        <servlet-name>EndpointsServlet</servlet-name>
        <url-pattern>/_ah/api/*</url-pattern>
    </servlet-mapping>


    <!-- Security -->
    <security-role>
        <role-name>admin</role-name>
    </security-role>
    <security-constraint>
        <web-resource-collection>
            <web-resource-name>admin</web-resource-name>
            <url-pattern>/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>admin</role-name>
        </auth-constraint>
    </security-constraint>

</web-app>

我在这里Security and Authentication

上查看了文档

请让我知道为什么这个不适合我。我做错了什么?

第二件事我想问的是,如果我保护所有URL仅访问管理员,我是否仍可以在Android中使用云终结点库,而我的应用程序可以在没有任何登录的情况下访问终结点?

我正在使用java8

1 个答案:

答案 0 :(得分:1)

由于使用的是Enpoints Framework,因此必须通过the Endpoints Framework docs中所述的方法来保护API。

用户将调用API代理,而不是直接调用应用程序上的端点,因此您必须保护API代理端点。

您可以在docs中看到有关使用Endpoints Framework for GAE时如何处理请求的详细说明。