2013-09-27 4 views
2

Интересно, как я могу добиться поведения, как с помощью этого @WebFilter аннотацию@WebFilter против <Filter> в web.xml

@WebFilter(
    urlPatterns = "/*", 
    filterName = "AuthenticationFilter", 
    description = "Filter all URLs" 
    , 
    initParams = { 
@WebInitParam(name = "unprotectedUrls", value = "/,/login,/authentication,/notification,/sdr")}) 
public class AuthenticationFilter implements Filter { 
...} 

(который работает хорошо, а это означает, что я не должен быть зарегистрирован только в для перечисленных путей, но для всех других путей я должен быть ... с помощью фильтра < > элемент в web.xml.

С помощью этого фильтра в web.xml:

<filter> 
     <filter-name>AuthenticationFilter</filter-name> 
     <filter-class>com.foo.bar.helper.AuthenticationFilter</filter-class> 
     <init-param> 
     <param-name>unprotectedUrls</param-name> 
     <param-value>/,/login,/authentication,/notification,/sdr</param-value> 
     </init-param> 
    </filter> 

он не признается, что означает, что я не должен быть зарегистрирован в течение всех дорожек/URL. Не происходит фильтрация.

Мое намерение состоит в том, чтобы настроить init-params таким образом, что мне не нужно редактировать код/​​класс всякий раз, когда будет включен дополнительный URL-адрес.

ответ

3

Вы только определили фильтр, вы не отобразили фильтр. Рядом с filter элемента необходим также filter-mapping элемента для отображения фильтра URL-адреса, это в основном замена для атрибута @WebFilter

<filter-mapping> 
    <filter-name> AuthenticationFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
+0

:) urlPatterns) Да, действительно. Я узнал об этом в то же время, но у меня недостаточно репутации, чтобы ответить на мой вопрос в течение 10 часов после запроса. Однако, спасибо. –

+1

Итак, с помощью следующей аннотации @WebFilter («/ *») мы можем обойтись без разметки web.xml? – Stephane

Смежные вопросы