【问题标题】:GWTP Rest dispatch: replace DefaultRequestBuilderFactory with own implementationGWTP Rest 调度:用自己的实现替换 DefaultRequestBuilderFactory
【发布时间】:2016-12-14 00:39:29
【问题描述】:

我的 GWT 前端位于端口 8888。REST 后端位于 8080。默认情况下,cookie 不起作用。如果我将为请求调用 RequestBuilder.setIncludeCredentials() ,似乎应该传递 cookie。 在这种情况下,我需要用我自己的实现替换 DefaultRequestBuilderFactory,因为我需要将 cookie 发送到服务器。

SecuredRequestBuilderFactory.java:

public class SecuredRequestBuilderFactory extends DefaultRequestBuilderFactory {
    public SecuredRequestBuilderFactory(HttpRequestBuilderFactory httpRequestBuilderFactory, BodyFactory bodyFactory, HeaderFactory headerFactory, UriFactory uriFactory, @RequestTimeout Integer requestTimeoutMs) {
        super(httpRequestBuilderFactory, bodyFactory, headerFactory, uriFactory, requestTimeoutMs);
    }

    @Override
    public <A extends RestAction<?>> RequestBuilder build(A action, String securityToken) throws ActionException {
        RequestBuilder builder = super.build(action, securityToken);
        builder.setIncludeCredentials(true);
        return builder;
    }
}

我已添加到我的 gwt.xml:

<replace-with class="com.example.rest.SecuredRequestBuilderFactory">
    <any>
        <when-type-is class="com.gwtplatform.dispatch.rest.client.core.RequestBuilderFactory"/>
        <when-type-is class="com.gwtplatform.dispatch.rest.client.core.DefaultRequestBuilderFactory"/>
    </any>
</replace-with>

我从调试器(带有 IDEA 插件的 Chrome)中发现,没有类 SecuredRequestBuilderFactory 的映射并且不包括凭据。

那么,有什么想法可以让它发挥作用吗?

【问题讨论】:

    标签: java gwtp gwt-platform


    【解决方案1】:

    我找到了通过 REST 请求传递所有 cookie 的解决方案:

    SecuredRequestBuilderFactory.java:

    public class SecuredRequestBuilderFactory extends DefaultRequestBuilderFactory {
    
        @Inject
        public SecuredRequestBuilderFactory(HttpRequestBuilderFactory httpRequestBuilderFactory, BodyFactory bodyFactory, HeaderFactory headerFactory, UriFactory uriFactory, @RequestTimeout Integer requestTimeoutMs) {
            super(httpRequestBuilderFactory, bodyFactory, headerFactory, uriFactory, requestTimeoutMs);
        }
    
        @Override
        public <A extends RestAction<?>> RequestBuilder build(A action, String securityToken) throws ActionException {
            RequestBuilder builder = super.build(action, securityToken);
            builder.setIncludeCredentials(true);
            return builder;
        }
    }
    

    MyRestDispatchModule.java:

    public class MyRestDispatchModule extends AbstractGinModule {
    
        static class MyCoreModuleBuilder extends CoreModuleBuilder {
            MyCoreModuleBuilder(BaseRestDispatchModuleBuilder<?> baseBuilder) {
                super(baseBuilder);
                requestBuilderFactory(SecuredRequestBuilderFactory.class);
            }
        }
    
        static class MyBuilder extends RestDispatchAsyncModule.Builder {
            @Override
            public CoreModuleBuilder core() {
                return new MyCoreModuleBuilder(this);
            }
        }
    
        @Override
        protected void configure() {
            install(new MyBuilder().build());
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-10
      • 1970-01-01
      • 2017-09-01
      • 2017-07-27
      • 1970-01-01
      • 1970-01-01
      • 2011-06-27
      • 2018-05-07
      相关资源
      最近更新 更多