2

検索していますが、答えが見つかりません。アクセス許可に基づいて安全なリソースが必要です。FacesContext が以前に初期化されておらず、セッション Bean にアクセス許可をロードする必要があるため、フィルターを使用できません。フィルターの使用を回避する解決策はありますか? PhaseListener、ViewHandler、および ResourceHandler は URL リソース リクエストをキャプチャできません。たとえば、この直接アクセスを拒否する必要があります。http://127.0.0.1:8080/test/resources/images/image.jpg

事前にThx...

4

1 に答える 1

1

JSF は、セッション スコープのマネージド Bean を の属性として格納します。HttpSessionこれは、Filterbyでのみ使用できますHttpServletRequest#getSession()

HttpSession session = ((HttpServletRequest) request).getSession();
SessionBean sessionBean = session.getAttribute("sessionBean");
// ...

更新:コメントによると、実際にCDIを使用しているようです:

私のフィルターは JSF よりも前にトリガーされます。getAttribute を使用すると、常に null 値が返されます。セキュリティを実装するためにインターセプターを使用する必要があるため、Bean で 'Named' および 'SessionScoped' アノテーションを使用して CDI を使用しています。

あなたがJSF独自のものを使用していたことを理解し@ManagedBeanました。最初の回答はそれにのみ適用されます。Bean がすでに CDI によって管理されている場合は、@NamedCDI 独自@Injectの通常の方法でFilter.

@Inject
private SessionBean sessionBean;

JSF の場合は、チェック@ManagedBeanを追加するだけです。if (sessionBean != null)フィルターが JSF サーブレットの前に呼び出されるかどうかは関係ありません。セッション Bean が JSF によって作成されるnullと、フィルターには含まれません。

于 2012-06-11T18:49:56.807 に答える