だから私は私のものと似たような質問にかなり出くわしました。
認証 Bean では、認証が成功すると一部の Web リソースにアクセスし、失敗するとアクセスを「フィルタリング」して現在のログイン ページにリダイレクトする必要があります。ここで、その認証 Bean に、成功した場合に備えて次の行を追加しました。
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put(authentificationBean1.AUTH_STATE, "true") ;
AUTH_STATEは、Bean で次のように定義されています。
public static final String AUTH_STATE = "";
失敗した場合は、次のことを行います。
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put(authentificationBean1.AUTH_STATE, null) ;
フィルター (認証ページを除くすべてのファイルに適用されるフィルター) では、doFilter メソッドは次のようになります。
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
if (((HttpServletRequest) request).getSession().getAttribute(authentificationBean1.AUTH_STATE) == null) {
((HttpServletResponse) response).sendRedirect("authentification.xhtml");
}
if(((HttpServletRequest) request).getSession().getAttribute(authentificationBean1.AUTH_STATE) != null) {
((HttpServletResponse) response).sendRedirect("accueil.xhtml");
}
}
私の考えは、認証がうまくいった場合、authentificationBean1.AUTH_STATEセッション属性がnull以外に設定されるため、フィルターテストでウェルカムページ (accueil.xhtml) にリダイレクトできるようになるというものでした。その属性が null の場合、認証ページにとどまります。
全体を試食: フィルターは機能しているように見えますが、多すぎます。つまり、認証テストが成功しなければならない場合でも、ウェルカム ページに進むことができません。実際にはフィルターなしで正常に機能していました.JSFまたはフィルターでフィルターを使用することについて何かを見逃したようです.
PS:呼び出す別のフィルターがないため、chain.doFilterを適用しませんでしたが、そこに何かが疑われます。
ご指摘ありがとうございます。
編集 :
<filter>
<filter-name>RestrictionFilter</filter-name>
<filter-class>beans.RestrictionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>RestrictionFilter</filter-name>
<url-pattern>/faces/accueil.xhtml</url-pattern>
</filter-mapping>