Я забираю старый проект, разработанный с GWT 2.5.0.
Мне нужно реализовать защиту CSRF, и я следовал этому уроку здесь .
Но я немного застрял
Мой проект выглядит так:
Serveur сторона
открытый интерфейс ParameterServiceAsync {
void getProperties( AsyncCallback<com.[...].model.PropertiesDto> callback );
/**
* Utility class to get the RPC Async interface from client-side code
*/
public static final class Util
{
private static ParameterServiceAsync instance;
public static final ParameterServiceAsync getInstance()
{
if ( instance == null )
{
instance = (ParameterServiceAsync) GWT.create( ParameterService.class );
}
return instance;
}
private Util()
{
// Utility class should not be instanciated
}
}
и когда я хочу сделать вызов RPC (пример):
public void onModuleLoad() {
ParameterServiceAsync.Util.getInstance().getProperties(new AsyncCallback<PropertiesDto>() {
@Override
public void onSuccess(PropertiesDto result) {
PropertiesDto = result;
[...]
}
@Override
public void onFailure(Throwable caught) {
[...]
}
});
Интерфейс Async генерируется автоматически с целью maven gwt: generateAsync.
НО, если я хочу применить учебник GWT для защиты XSRF
Я должен сделать что-то подобное:
public void onModuleLoad() {
XsrfTokenServiceAsync xsrf = (XsrfTokenServiceAsync)GWT.create(XsrfTokenService.class);
((ServiceDefTarget)xsrf).setServiceEntryPoint(GWT.getModuleBaseURL() + "xsrf");
xsrf.getNewXsrfToken(new AsyncCallback<XsrfToken>() {
public void onSuccess(XsrfToken token) {
((HasRpcToken) ParameterServiceAsync).Util.getInstance().setRpcToken(token);
// make XSRF protected RPC call
ParameterServiceAsync.Util.getInstance().getProperties(new AsyncCallback<PropertiesDto>() {
@Override
public void onSuccess(PropertiesDto result) {
PropertiesDto = result;
[...]
}
@Override
public void onFailure(Throwable caught) {
[...]
}
});
}
public void onFailure(Throwable caught) {
try {
throw caught;
} catch (RpcTokenException e) {
// Can be thrown for several reasons:
// - duplicate session cookie, which may be a sign of a cookie
// overwrite attack
// - XSRF token cannot be generated because session cookie isn't
// present
} catch (Throwable e) {
// unexpected
}
});
}
Это не хорошо для меня.
Есть ли способ, которым я могу сделать что-то подобное?
ParameterServiceAsync.Util.getSecureXsrfInstance().getProperties(new AsyncCallback<PropertiesDto>() {