GWT (2.5.0) + защита XSRF - PullRequest
       25

GWT (2.5.0) + защита XSRF

0 голосов
/ 16 января 2019

Я забираю старый проект, разработанный с 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>() {
...