2

JSF アプリケーションに単純なログイン機能を実装しようとしています。この回答に続いて、AuthenticationFilter を実装しました。マネージド Bean でオブジェクトを次のように設定しようとしています。

FacesContext facesContext = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(true);
session.setAttribute("user", user);

AuthenticationFilter の doFilter メソッドは次のようになります。

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {

       if (((HttpServletRequest) req).getSession().getAttribute("user") == null){   
            ((HttpServletResponse) resp).sendRedirect("../login.jsf");

       } else {
         chain.doFilter(req, resp);
       }
   }

私はいつも((HttpServletRequest) req).getSession().getAttribute("user") == null(真)を得る。私は(私のBeanで)のような多くの選択肢を検索して適用しました:

facesContext.getExternalContext().getSessionMap().put("user", user);
request.getSession().setAttribute("user", user);
session.getServletContext().setAttribute("user", user); // DISASTER 

これを管理する方法がわかりません。一見重複した質問も役に立ちませんでした。私は何を間違っていますか?どうすればそれを機能させることができますか?JSF機能を使用してそれを行うための適切でクリーンな方法はありますか?

4

1 に答える 1

2

前の回答のようなセキュリティ ライブラリを使用することをお勧めします。これを間違って行う方法が多すぎます...

ただし、自分でやろうと決心している場合は、セッションでこれを設定しないでください。ManagedBean を宣言し、それをセッション レベルとしてスコープします。Bean のプロパティをユーザー名にします。

于 2012-06-18T19:10:21.740 に答える