URLを入力して特定のページにアクセスするのを防ぐためのフィルターを作成しました。私は3ページを持って、ユーザーはpage2またはpage3にのみpage1を介してアクセスするはずです。最初のページにはユーザ名を入力し、デンはpage2に移動する必要があります。私はマネージドBeanのユーザースコープのセッションを持っています。これは私のフィルタメソッドです。問題は、私はこの行(req.getAttribute( "user")== null)を私にnullを渡すことはないが、この[email protected]のような何かの値をユーザ名を入力していないということです。誰でも間違ってどこに私を修正するのに役立ちますか?JSFフィルターが特定のページに直接アクセスしないようにする
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
HttpSession httpSession = req.getSession(false);
String pageRequested = req.getRequestURI().toString();
if (httpSession == null) {
httpSession = req.getSession(true);
resp.sendRedirect("Page1.faces");
} else if (httpSession.getAttribute("user") != null
&& ((User) httpSession.getAttribute("user")).getUsername() == null
&& !pageRequested.contains("Page1.faces")) {
resp.sendRedirect("Page1.faces");
} else {
chain.doFilter(request, response);
}
}
OPは、コンテナ管理の認証を使用していないようです例えばが、そのようなCSSはこのpageRequested.containsを追加するなど、他のリソースをフィルタリング防ぐために持っている自家製の認証、そう 'はgetRemoteUser( ) 'はOPの場合は何も返しません。 – BalusC