【问题标题】:Logout in Vaadin with HTTP basic authentication使用 HTTP 基本身份验证在 Vaadin 中注销
【发布时间】:2016-12-02 12:50:34
【问题描述】:

在我的 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 的开发环境中工作。


非常感谢任何帮助!

【问题讨论】:

  • 尝试在 http 会话上调用 .invalidate()。
  • 如果您使用基本身份验证,则无法注销,因为浏览器每次都会重新发送身份验证详细信息。您必须关闭浏览器或切换到表单登录。
  • @Gas 难道不能用 NoCacheFilter 来做吗?
  • @Marco - 缓存与身份验证完全不同。我不知道 NoCacheFilter 到底是什么,但看起来它可以防止页面被缓存,这与浏览器重新发送身份验证数据无关。所以不,过滤器是不可能的。
  • NoCacheFilter 阻止用户在注销后有意义地使用浏览器后退按钮。我不再需要过滤器,因为我有更好的解决方案,正如您在我的回答中看到的那样。感谢您的帮助!

标签: java session websphere vaadin logout


【解决方案1】:

我通过使用一个 JS 函数解决了这个问题,该函数发送一个带有错误用户名和密码 (Source) 的 XMLHttpRequest。之后我在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);
}

【讨论】:

    猜你喜欢
    • 2011-05-08
    • 2017-11-16
    • 2010-10-14
    • 2013-04-05
    • 2021-10-08
    • 1970-01-01
    • 2011-12-01
    • 2013-12-30
    • 1970-01-01
    相关资源
    最近更新 更多