読者です 読者をやめる 読者になる 読者になる

Challenge Java EE !

Java EEを中心に趣味や仕事における開発メモを書いています。

JSFでログアウト処理のお作法的なものって…?

JSF

いよいよGlassFish 4.0がリリースされて、JSFも2.2の時代に突入したようです。
はてなブログのカテゴリにバージョン入れておけば良かった…orz

Java EE6あるいは7に触れていきたい反面、中々そうもいかなそうな雰囲気もあって、仕事って難しいなぁと思ったり(-_-;

……

気を取り直して…もう開発フェーズは終わってしまったので、過去書いていないものから抜粋してみました。

ログアウトの処理はアプリケーションによって色々やることがあると思いますが、JSF使っていて最低限これだけはやっておけ!的なものが何かあるのかな、と前に調べました。

色々なサイトみても最低限、といのは2つくらいに集約される…?のかなぁ、と。

当時参考にしたのは主に以下でした。って全てStackOverflowかつ回答者がBalusCさんで情報が偏りすぎてる気もしますが…(^^;

1つはSessionの破棄。

ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
HttpSession session = (HttpSession) externalContext.getSession(false);
if(session!=null){
    try{
        session.invalidate();
    }catch(Exception e){
        //throwされる可能性があるのはIllegalStateException
        //セッション破棄失敗ログなど
    }
}

@megascusさんよりコメント頂き、try-catch入れました。
HttpSession IllegalStateException:セッションは既に無効化されています

上記ブログで書かれているように確かにjavadocみるとthrowの記述がありました。
f:id:kikutaro777:20130611220124j:plain

getSessionの引数はセッションの有無を見て新規にセッションを作るかどうかのようですので、ログアウトではfalseということですかね。
http://www.syboos.jp/java/doc/httpsession-usage-by-samples.html

ちなみにこれは

FacesContext.getCurrentInstance().getExternalContext().invalidateSession();

でも良いっぽい(?)

もう1つはリダイレクト。

こちらは必須か微妙ですが、invalidateで破棄したけど、フォワードだと古いセッションデータが残ってしまうような説明が。URL的にリダイレクト処理しておくほうが良い気も。

return "hogeLogin.xhtml?faces-redirect=true";

他に「これもやっといたほうがいいよ!」というのあればコメント頂けると幸いです(^^;

にほんブログ村 IT技術ブログへ
にほんブログ村
にほんブログ村 IT技術ブログ Javaへ
にほんブログ村