Отправка GWTP Rest: заменить DefaultRequestBuilderFactory собственной реализацией

Мой интерфейс GWT находится на порту 8888. Серверная часть REST — на 8080. По умолчанию файлы cookie не работают. Кажется, что файлы cookie должны быть переданы, если я вызову RequestBuilder.setIncludeCredentials() для запроса. В этом случае мне нужно заменить 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>

Я обнаружил из отладчика (Chrome с плагином IDEA), что для класса SecuredRequestBuilderFactory нет сопоставления, и учетные данные не были включены.

Итак, есть идеи, как заставить его работать?


person Pavel Sokolov    schedule 09.12.2016    source источник


Ответы (1)


Я нашел решение для передачи всех файлов cookie с запросом REST:

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());
    }
}
person Pavel Sokolov    schedule 13.12.2016