2016-04-10 6 views
3

Я работаю над приложением tomcat. Я пытаюсь добавить токен аутентификации CSRF, предоставленный библиотекой catlina (org.apache.catalina.filters.CsrfPrevention). Я добавил фильтр web.xml Не удалось аутентифицировать запрос на отправку токена CSRF с tomcat

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

Теперь, когда я бегу сервер Войти страница оказывает. Когда я вхожу в имя пользователя и пароль, браузер отправляет запрос на запрос в Сервлет входа в CSRF_NONCE http://localhost:9090/Login?x=true&org.apache.catalina.filters.CSRF_NONCE=7DE88A93A526E465566864684FEB01C9. Его наличие CSRF_NONCE, но все еще ответ имеет статус 403. Я прочитал много документов, но не смог найти решение для аутентификации post-запроса.

Я также утверждаю, что мне нужно кодировать все URL-адреса, но не смог найти, как мне это нужно делать. Нужно ли мне писать фильтр для этого?

ответ

2

Наконец-то я получил ответ. Я размещаю его здесь для других.

Для визуализации JSP я использовал объект RequestDispatcher

dispatcher.forward(request, response); 

Так фильтр не получает, приложенный к данной ссылке. Наконец я нашел ответ. Либо я должен был использовать диспетчер в параметре с методом filter или response.sendRedirect в обработчике сервлета.

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