【发布时间】:2018-01-10 15:38:01
【问题描述】:
当 Tomcat 会话超时时,我想将我的用户重定向到我的 GWT 应用程序的主页,以便他们可以再次登录。为了强制执行此操作,当用户在会话超时后尝试执行任何操作时,我尝试使用 GWT 抛出的 StatusCodeException -
SEVERE: com.google.gwt.user.client.rpc.StatusCodeException: 0
为此,我使用以下代码 -
public void onModuleLoad() {
GWT.UncaughtExceptionHandler uncaughtExceptionHandler = new GWT.UncaughtExceptionHandler() {
public void onUncaughtException(Throwable e) {
if (e instanceof StatusCodeException) {
logger.log(Level.ERROR, "Exception caught!");
logger.log(Level.ERROR, ((StatusCodeException) e).getStatusCode());
}
}
};
GWT.setUncaughtExceptionHandler(uncaughtExceptionHandler);
try {
// rest of the code in onModule() - I'm expecting any operation to throw StatusCodeException when session times out.
} catch (RuntimeException ex) {
uncaughtExceptionHandler.onUncaughtException(ex);
}
}
这不起作用。 StatusCodeException 没有被代码捕获,而是显示在控制台上。我在这里做错了什么?
这个想法是捕获StatusCodeException并使用它的getStatusCode()方法来找出HTTP错误代码是否为403。如果是,我想使用Window.Location.assign("https://example.com/redirect"); 将他们重定向到登录页面。
【问题讨论】:
-
你能分享一下你是如何在 onModuleLoad() 中调用服务器的吗?如果您使用的是 AsyncCallback,onFailure 方法在做什么?如果它实际上没有抛出它得到的异常,那么您的未捕获异常处理程序将看不到它。不相关,状态码 0 并不意味着会话已经过期(至少不是来自任何表现良好的服务器......),而是发生了网络错误,浏览器不会告诉客户端代码实际发生了什么( dns、请求超时、请求被拒绝、cors 问题等)。
-
@ColinAlworth 我使用的是
AsyncCallback,配置为onFailure(Throwable caught) { logger.error(caught); }。所以,我需要做的就是为UncaughtExceptionHandler添加throws StatusCodeException来获取它?
标签: java gwt exception-handling tomcat8 http-error