使用 HTTP 基本身份验证在 Vaadin 中注销

Logout in Vaadin with HTTP basic authentication

在我的 Vaadin 应用程序中,我想要一个注销按钮,它将我重定向到登录屏幕并强制用户输入凭据。我使用 WebSphere 作为应用程序服务器,登录是通过 http 基本身份验证完成的。

到目前为止我试过这个:

VaadinRequest vaadinRequest = VaadinService.getCurrentRequest();
VaadinServletRequest vaadinServletRequest = (VaadinServletRequest) vaadinRequest;
HttpServletRequest hsRequest = vaadinServletRequest.getHttpServletRequest();
    try
    {
        hsRequest.logout();
    }
    catch (ServletException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

还有这个:

UI.getCurrent().getPage().setLocation("/framework42/S42FwWeb/?restartApplication");

我也知道我可以使用

UI.getCurrent().getPage().setLocation("/pkmslogout");

通过 WebSeal 执行注销。我希望注销也能在开发环境中工作,我们不使用 WebSeal。


非常感谢任何帮助!

我通过使用一个 JS 函数解决了这个问题,该函数发送一个带有错误用户名和密码的 XMLHttpRequest (Source)。之后我在 HttpServletRequest 对象上调用了 logout() 方法。

StringBuilder jsCall = new StringBuilder();
jsCall.append("var request = new XMLHttpRequest();");
jsCall.append("request.open(\"GET\", \"");
jsCall.append(AdminUI.getS42Url());

//set credentials to user: _ and pw: _
jsCall.append("\", true, \"_\", \"_\");");
jsCall.append("request.send();");

//execute JS call
JavaScript.getCurrent().execute(jsCall.toString());

//logout user and destroy session
VaadinRequest vaadinRequest = VaadinService.getCurrentRequest();
VaadinServletRequest vaadinServletRequest = (VaadinServletRequest) vaadinRequest;
HttpServletRequest hsRequest = vaadinServletRequest.getHttpServletRequest();
try
{
    hsRequest.logout();
}
catch (ServletException e)
{
    LOG.error("", e);
}