Authentication GWT身份验证

Authentication GWT身份验证,authentication,gwt,handler,Authentication,Gwt,Handler,我正在开发一个GWT+Spring应用程序,在将GWT与Spring安全系统集成时遇到了困难 服务受到spring安全和响应的保护,401用于未经身份验证的用户(匿名),403用于未经授权的访问。我这里的问题是,我不能让失败的异步请求以我想要的方式来处理这些错误,而不需要反复键入失败样本存根来进行处理 我已经成功地为Spring安全性开发了自己的过滤器,它用“authorizeform”头响应,该头包含401异常登录表单的URL 因此,问题是: 是否有任何方法可以在全局范围内处理401/403异

我正在开发一个GWT+Spring应用程序,在将GWT与Spring安全系统集成时遇到了困难

服务受到spring安全和响应的保护,401用于未经身份验证的用户(匿名),403用于未经授权的访问。我这里的问题是,我不能让失败的异步请求以我想要的方式来处理这些错误,而不需要反复键入失败样本存根来进行处理

我已经成功地为Spring安全性开发了自己的过滤器,它用“authorizeform”头响应,该头包含401异常登录表单的URL

因此,问题是: 是否有任何方法可以在全局范围内处理401/403异常,而无需样板文件onFailure代码并从指定的头重定向到URL

即将推出的RequestFactory有点像“AuthenticationFailedHandler”,但2.1几乎完全没有文档记录,而且“正在快速开发”,所以看起来它不是一个选项


提前谢谢

在应用程序级别处理安全故障的一个非常简单的方法是为应用程序定义一个抽象回调,它将在一个一致的位置处理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);
}
公共抽象类ServiceCallback实现MethodCallback{
私有服务回调侦听器;
公共服务回调(ServiceCallbackListener serviceCallbackActions){
this.listener=serviceCallbackActions;
}
@凌驾
public void onFailure(方法,可丢弃异常){
if(method.getResponse().getStatusCode()==403 | | method.getResponse().getStatusCode()==401){
listener.onUnAuthorizedAccess();
}否则{
onError(方法、例外);
}
}
公开摘要无效者(方法,可抛弃的例外);
}
您现在可以按以下方式调用服务:

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.. ");
        }
    });
service.callToServer(新服务回调(sessionListener){
@凌驾
成功时公共无效(方法、服务响应){
调试(“它工作了!”);
}
@凌驾
公共void onError(方法,可丢弃的例外){
Log.debug(“没有工作…”);
}
});

当然,如果希望错误处理仅在应用程序级别进行,您可能希望将onError设置为一个非抽象方法,其主体为空。

在应用程序级别处理安全故障的一个非常简单的方法是为您的应用程序定义一个抽象回调,它将在一个一致的位置处理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);
}
公共抽象类ServiceCallback实现MethodCallback{
私有服务回调侦听器;
公共服务回调(ServiceCallbackListener serviceCallbackActions){
this.listener=serviceCallbackActions;
}
@凌驾
public void onFailure(方法,可丢弃异常){
if(method.getResponse().getStatusCode()==403 | | method.getResponse().getStatusCode()==401){
listener.onUnAuthorizedAccess();
}否则{
onError(方法、例外);
}
}
公开摘要无效者(方法,可抛弃的例外);
}
您现在可以按以下方式调用服务:

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.. ");
        }
    });
service.callToServer(新服务回调(sessionListener){
@凌驾
成功时公共无效(方法、服务响应){
调试(“它工作了!”);
}
@凌驾
公共void onError(方法,可丢弃的例外){
Log.debug(“没有工作…”);
}
});
当然,如果您希望错误处理仅在应用程序级别进行,那么您可能希望将onError设置为具有空主体的非抽象方法