【问题标题】:@WebFilter vs. <Filter> in web.xml@WebFilter 与 web.xml 中的 <Filter>
【发布时间】:2013-10-04 02:27:09
【问题描述】:

我想知道如何实现像使用 @WebFilter 注释这样的行为

@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 时,我就不必编辑代码/类。

【问题讨论】:

    标签: spring spring-mvc annotations servlet-filters


    【解决方案1】:

    您只定义了过滤器,还没有映射过滤器。除了filter 元素,您还需要一个filter-mapping 元素将过滤器映射到url,这基本上是@WebFilterurlPatterns 属性的替换

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

    【讨论】:

    • :)) 是的,确实如此。我在此期间发现了这一点,但我没有足够的声誉在询问后 10 小时内回答我自己的问题。不过,谢谢。
    • 那么使用下面的注解@WebFilter("/*") 我们可以完全不使用web.xml 标记吗?
    猜你喜欢
    • 2012-06-07
    • 2019-11-12
    • 2011-05-27
    • 2016-10-26
    • 2013-08-02
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多