2016-12-02 20 views
0

私のVaadinアプリケーションでは、私はログイン画面にリダイレクトされ、ユーザーに資格情報の入力を強制するログアウトボタンがあります。私はWebSphereをアプリケーション・サーバーとして使用し、ログインはhttp基本認証を使用して行われます。HTTP基本認証でVaadinでログアウト

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を使用しない開発環境でもログアウトを有効にしたいと思います。


ご協力いただきありがとうございます。

+0

httpセッションで.invalidate()を呼び出してみてください。 –

+0

Basic認証を使用している場合、ブラウザは認証情報を毎回再送信しているので、ログアウトを行うことはできません。ブラウザを閉じたり、ログインしてログインする必要があります。 – Gas

+0

@ガスNoCacheFilterでそれを行うことはできませんか? – Marco

答えて

0

悪いユーザー名とパスワード(Source)を使ってXMLHttpRequestを送信するJS関数を使用してこの問題を解決しました。その後、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); 
}