I am trying to write my custom dispatcher for resty gwt.
My dispatcher RestyDispatcher
will contain two filters:
BasicAuthHeaderDi
My solution for this is to execute manually filter
method.
I don't know is it good solution. I assume that this is a bug, cause filter
method should be called by RestyGWT, as it is declared in interface DispatcherFilter
and implemented in DefaultFilterawareDispatcher
class as follow:
package org.fusesource.restygwt.client.dispatcher;
public class DefaultFilterawareDispatcher implements FilterawareDispatcher {
@Override
public Request send(Method method, RequestBuilder builder) throws RequestException {
for (DispatcherFilter f : dispatcherFilters) {
if (!f.filter(method, builder)) {
// filter returned false, no continue
if (GWT.isClient() && LogConfiguration.loggingIsEnabled()) {
Logger.getLogger(DefaultFilterawareDispatcher.class.getName())
.fine(f.getClass() + " told me not to continue filtering for: "
+ builder.getHTTPMethod() + " " + builder.getUrl());
}
return null;
}
}
return builder.send();
}
}
Here is my code implemenation:
public class ClientModule extends AbstractPresenterModule {
@Override
protected void configure() {
bind(RestyGwtConfig.class).asEagerSingleton();
install(new DefaultModule.Builder().defaultPlace(Routing.PAGE.url).errorPlace(Routing.PAGE.url).unauthorizedPlace(Routing.LOGIN.url).tokenFormatter(RouteTokenFormatter.class).build());
install(new AppModule());
bind(CurrentUser.class).in(Singleton.class);
bind(IsAdminGatekeeper.class).in(Singleton.class);
bind(UserLoginGatekeeper.class).in(Singleton.class);
}
}
public class RestyGwtConfig {
static {
Defaults.setDispatcher(new RestyDispatcher());
Defaults.setServiceRoot(new Resource(GWT.getModuleBaseURL()).resolve("../../cms/services").getUri());
}
}
public class RestyDispatcher extends DefaultFilterawareDispatcher {
public RestyDispatcher() {
addFilter(new ForbiddenDispatcherFilter());
addFilter(new BasicAuthHeaderDispatcherFilter());
}
@Override
public Request send(Method method, RequestBuilder builder) throws RequestException {
for (DispatcherFilter e : this.dispatcherFilters) {
e.filter(method, builder);
}
return builder.send();
}
}
Please correct me if I am wrong.
I manually override send
method in RestyDispatcher
class, So my implementation have to manually execute super.send(method, builder)
. Or I should not override send
method at all.
So RestyDispatcher
it should look like this:
public class RestyDispatcher extends DefaultFilterawareDispatcher {
public RestyDispatcher() {
addFilter(new ForbiddenDispatcherFilter());
addFilter(new BasicAuthHeaderDispatcherFilter());
}
@Override
public Request send(Method method, RequestBuilder builder) throws RequestException {
return super.send(method, builder);
}
}
or
public class RestyDispatcher extends DefaultFilterawareDispatcher {
public RestyDispatcher() {
addFilter(new ForbiddenDispatcherFilter());
addFilter(new BasicAuthHeaderDispatcherFilter());
}
}