gpt4 book ai didi

java - 云端点 : Access Paramters in Servlet Filter

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:44:05 27 4
gpt4 key购买 nike

我正在尝试使用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com