2010-09-16 94 views
2

我正在开发一个GWT + Spring应用程序,我很难将GWT与Spring Security系统集成在一起。GWT身份验证

服务受春季安全和响应的保护,401未经身份验证的用户(匿名)和403未经授权访问。我的问题在于,我无法让失败的AsyncRequests以我想要的方式处理这些错误,而无需再次输入那些未处理的样板存根。

我设法为Spring Security开发了我自己的过滤器,该过滤器使用“authorizeform”标头响应,该标头携带401例外的登录表单URL。

所以问题是: 有没有办法处理401/403全局例外,没有样板onFailure代码并重定向到指定头的URL?

即将到来的RequestFactory类似于“AuthenticationFailedHandler”,但2.1几乎完全没有文档和“快速开发”,所以它看起来不是一个选项。

在此先感谢!

回答

0

在应用程序级别处理安全失败的一种非常简单的方法是为您的应用程序定义一个抽象回调函数,它将在一个一致的地方处理onFailure样板文件。对于整个代码中的每个服务请求,您都可以使用该回调并执行任何特定处理。

public abstract class ServiceCallback<T> implements MethodCallback<T> { 
private ServiceCallbackListener listener; 

public ServiceCallback(ServiceCallbackListener serviceCallbackActions) { 
    this.listener = serviceCallbackActions; 
} 

@Override 
public void onFailure(Method method, Throwable exception) { 
    if (method.getResponse().getStatusCode() == 403 || method.getResponse().getStatusCode() == 401) { 
     listener.onUnAuthorizedAccess(); 
    } else { 
     onError(method, exception); 
    } 
} 

public abstract void onError(Method method, Throwable exception); 
} 

现在,您可以拨打以下方式服务:

service.callToServer(new ServiceCallback<ServiceResponse>(sessionListener) { 
     @Override 
     public void onSuccess(Method method, ServiceResponse response) { 
      Log.debug("It worked!"); 
     } 

     @Override 
     public void onError(Method method, Throwable exception) { 
      Log.debug("Didn't work.. "); 
     } 
    }); 

当然,如果你想的错误处理只是在应用层面,你可能要设置的onError到是一个空的主体的非抽象方法。