2016-04-10 15 views
3

私はtomcatアプリケーションで作業しています。私はcatlinaライブラリ(org.apache.catalina.filters.CsrfPrevention)が提供するCSRF認証トークンを追加しようとしています。私は tomcatでCSRFトークンのポストリクエストを認証できません

<filter> 
    <filter-name>CsrfFilter</filter-name> 
    <filter-class>org.apache.catalina.filters.CsrfPreventionFilter</filter-class> 
    <init-param> 
     <param-name>entryPoints</param-name> 
     <param-value>/Login</param-value> 
    </init-param> 
</filter> 

<filter-mapping> 
    <filter-name>CsrfFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

はまた、私は

<% String url = '/Login?x=true'; 
    String encodeUrl = response.encode(url); 
%> 
    <form action="<%=urlEncode%" action="Post"> 
     <input type="text" name="username"/> 
     <input type="password" name="password"/> 
     <button type="submit">Login</button> 
    </form> 

は、今私は、ログインページがレンダリングされているサーバを実行しているときにlogin.jspを更新したweb.xmlにフィルタを追加しました。ユーザ名とパスワードを入力すると、ブラウザはCSRF_NONCEでログインサーブレットへの投稿要求を送信しますhttp://localhost:9090/Login?x=true&org.apache.catalina.filters.CSRF_NONCE=7DE88A93A526E465566864684FEB01C9そのCSRF_NONCEを持っていますが、依然としてレスポンスのステータスは403です。私は多くのドキュメントを読んでいますが、ポストリクエントを認証するソリューションは見つかりませんでした。

私はすべてのURLをエンコードする必要がありますが、どうすればいいのか分からないことがあります。そのためにフィルタを記述する必要はありますか?

答えて

2

最後に私は答えを得ました。私は他の人のためにここに掲示しています。

JSPをレンダリングするために私は

dispatcher.forward(request, response); 

だからフィルタは与えられたURLに適用されていませんでしたRequestDispatcherオブジェクトを使用していました。最後に私は答えを見つけました。どちらの場合でも、サーブレットハンドラのfilterまたはresponse.sendRedirectメソッドを使用して、ディスパッチャをパラメータとして使用する必要がありました。

http://www.theserverside.com/news/thread.tss?thread_id=34168

関連する問題