java - 云端点 : Access Paramters in Servlet Filter

标签 java google-app-engine guice google-cloud-endpoints servlet-filters

我正在尝试使用 Google Cloud Endpoints 构建一个 API。

由于 Cloud Endpoints 不提供除 Google 自己的 OAuth 之外的身份验证,所以我尝试构建自己的 OAuth。因此,我想在 servlet 过滤器中访问为 API 提供的参数(例如 @Named("token") token )。

不幸的是,我在 httpRequest 中找不到任何提供的信息。那是正常的吗?是否有可能访问参数?

如果有人能帮助我,我将不胜感激!

更新:

根据 jirungaray 的信息,我尝试使用 header 构建身份验证,但遇到了同样的问题。使用 REST-Client 发送一些 header ,因为我无法弄清楚如何使用 API Explorer 执行此操作。在我的过滤器中,我尝试从 header 访问 token :

@Override
public void doFilter(
        ServletRequest request,  ServletResponse response, FilterChain chain)
        throws IOException, ServletException {

    HttpServletRequest httpRequest = (HttpServletRequest) request;
    String authToken = httpRequest.getHeader(Constants.AUTH_TOKEN);
    ...
    chain.doFilter(request, response);
}

我之所以尝试这样做,是因为我正在使用 Guice 进行依赖注入(inject),并希望将我的 token 注入(inject)到另一个对象中。

有了 Guice,我有以下 Provider 使用 token 为每个请求注入(inject) FacebookClient(使用 token )。

@Provides
public FacebookClient getFacebookClientProvider(@Named("fbToken") Provider<String> fbToken) {
    return new DefaultFacebookClient(fbToken.get(), Version.VERSION_2_2);
}

如 Guice wiki ( SevletModule ) 中所述,它使用 sevlet 过滤器从请求中获取信息。

是否有任何解决方案可以使用 Cloud Endpoints 实现这种 DI?

最佳答案

菲利普, 是的,您收到一个空请求确实有意义。您的端点调用首先由 Google 处理(他们接收 API 调用),然后处理这些调用并将其发送到您应用中的处理程序。由于这一切都是在后台完成的,因此很容易忽略您的端点实际上并没有收到您发送的相同请求,它们收到的是从 Google 的基础设施发送的完全不同的请求。

即使您的方法应该有效,在 url 中包含 token 信息使它们更容易嗅探,即使您使用 SSL 或加密您的参数, token 也显而易见。 对于您要实现的目标,我建议您将 token 作为 header 包含在请求中,并通过直接在端点上访问 HTTPRequest 来检索该 header ,如果您在其中包含 HTTPServletRequest 参数,则会自动注入(inject)你端点方法。

例如。

    public APIResponse doSomething(SomeComplexRquestModel request,
            HttpServletRequest rawRequest) {
}

如果您仍然觉得应该使用原来的方法,请发表评论,我会帮助您调试问题。

关于java - 云端点 : Access Paramters in Servlet Filter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29770580/

相关文章:

java - 将 java 应用引擎调用转换为 GQL

google-app-engine - GAE/JDO - 未找到 jdopersistencemanagerfactory

java - 注入(inject) Guice 的 DAO 应该是单例吗?

java - 在 Android 上混合 guice 和 scala 时得到 "failure in processEncodedAnnotation"

java - 单击时禁用按钮,然后重新启用它

java - 如何获取play Framework 2.7中的资源?

java - Google Drive API上传文件异常

java - Guice 辅助注入(inject)已配置

Java/EJB/Hibernate 事务同步防止Oracle死锁

java - 将面板放入面板 java GUI 中