使用 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);
}
在我的 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);
}