2016-04-10 197 views
3

我正在開發一個tomcat應用程序。我正在嘗試添加由catlina庫(org.apache.catalina.filters.CsrfPrevention)提供的CSRF身份驗證令牌。我已經加入過濾到web.xml 無法使用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> 

而且我已經更新了login.jsp的

<% 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> 

現在,當我運行的服務器登錄頁面的渲染。當我輸入用戶名和密碼瀏覽器正在發送Post請求登錄servlet與CSRF_NONCE http://localhost:9090/Login?x=true&org.apache.catalina.filters.CSRF_NONCE=7DE88A93A526E465566864684FEB01C9。它擁有CSRF_NONCE,但仍然是響應狀態403.我已閱讀了許多文檔,但找不到任何解決方案來驗證郵寄請求。

我還記得,我需要編碼所有的網址,但無法找到我應該怎麼做。我需要爲此編寫過濾器嗎?

回答

2

最後我得到了答案。我在這裏發佈給其他人。

用於渲染的JSP我使用

dispatcher.forward(request, response); 

所以過濾器沒有得到應用到給定的URL的RequestDispatcher對象。最後我找到了答案。或者我應該在Servlet處理程序中使用帶有filter或response.sendRedirect方法的參數調度程序。

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

相關問題