2010-12-07 24 views
0

私はいくつかのXHTMLページを持っています。プロジェクトを実行すると、ログインしていなくてもページを表示できます。アドレスバーに直接入力すると、ページにアクセスできます。ユーザーがログインしていないときにWebページを保護する方法

login.xhtml以外のXHTMLファイルを保護するにはどうすればよいですか?私はFacesConfigにセキュリティ制約を追加しようとしましたが、それはすべて私の*.xhtmllogin.xhtmlさえブロックします。


アップデートは私が/secureフォルダ内のすべての私のファイルが期待login.xhtmlを入れ

<security-constraint> 
    <display-name>Protection</display-name> 
    <web-resource-collection> 
     <web-resource-name>Protection</web-resource-name> 
     <description>Protection</description> 
     <url-pattern>/secured/*</url-pattern> 
    </web-resource-collection> 
</security-constraint> 

私のweb.xmlファイルでこれを追加しました。

しかし、プロジェクトを実行すると、アドレスバーに.../secured/*.jsfと入力するといつでもアクセスできます。どのように私はオフラインで閲覧するか、ログインしていない午前とき、私はそれを保護することができます。

答えて

2

私はFacesConfigにセキュリティ制約を追加しようとしましたが、それはすべてブロックの私*.xhtmlでもlogin.xhtml

faces-config.xmlが持っていますセキュリティ制約の概念はない。あなたはweb.xmlと混同している可能性があります。セキュリティ制約のurl-patternをより具体的にする必要があります。 *.xhtmlは使用しないでください。ただし、/secured/*程度を使用し、そのフォルダに制限付きファイルを置きます(もちろん、login.xhtmlファイルが必要です)。

さらに、には、のページをキャッシュしないようブラウザに指示することをおすすめします。あなたが同じurl-patternにマッピングされ、doFilter()方法では、以下のんFilterすることによって、これを達成することができます。これにより

HttpServletResponse hsr = (HttpServletResponse) response; 
hsr.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1. 
hsr.setHeader("Pragma", "no-cache"); // HTTP 1.0. 
hsr.setDateHeader("Expires", 0); // Proxies. 
chain.doFilter(request, response); 

、エンドユーザーは、ブラウザのキャッシュからページを表示することができません。テストする前にブラウザのキャッシュをクリアすることを忘れないでください。

+0

申し訳ありません!私はweb.xmlを意味します。 – Steffi

+0

あなたの回答に感謝、私はそれを試してみましょう! – Steffi

+2

ようこそ。あなたはそのように叫ぶ必要はありませんが、私は生まれながらのろう者であることは本当にそれを聞くことはありません。 – BalusC

関連する問題