【问题标题】:needs to exclude js/css/jpg etc files from filtering @WebFilter需要从过滤@WebFilter 中排除 js/css/jpg 等文件
【发布时间】:2012-10-28 13:24:02
【问题描述】:

我正在过滤每个网址,即使用@WebFilter("/*")。用户需要登录才能查看任何页面,如果他不是,他会被重定向到/login.do 页面。

现在当用户转到login.do 页面时出现问题,因为用户没有登录其他请求,即获取.js、.css、.jpg、.png 等的请求也被重定向到login.do页。

我尝试了以下代码:

if(requestedUri.matches(".*[css|jpg|png|gif|js].*")){
    chain.doFilter(request, response);
    return;
}

但在这种情况下,所有页面都可以在没有登录的情况下访问。所以,基本上我需要一种方法来从过滤中排除 css、jpg、js 文件的 url。 有什么帮助吗?提前致谢。

【问题讨论】:

    标签: java jakarta-ee servlets servlet-filters


    【解决方案1】:

    对不起!那是我的愚蠢错误。正则表达式不正确!

    应该是.*(css|jpg|png|gif|js)

    【讨论】:

    • 作为攻击者,我只需将 ?my_hack=css 附加到我的网址并绕过您的过滤器 :)
    • 好吧,我改变了策略。但是你怎么知道我在这里使用正则表达式? :)
    • 假设攻击者可以访问您的源。那时你的系统还会安全吗? Kerckhoff's Principle
    【解决方案2】:

    如果 URL 像 a/b.jspa/b.giffs 将匹配 .*(css|jpg|png|gif|js)

    所以正则表达式应该是.*(\bcss\b|\bjpg\b|\bpng\b|\bgif\b|\bjs\b)

    【讨论】:

      【解决方案3】:

      如果你想得到请求的扩展,你应该使用:

      .*(css|jpg|png|gif|js)$
      

      匹配

      hello.htm.jpg
      hello.js
      hello.ico
      

      不匹配与:

      hello
      hello.
      hello.csv
      hello.htm
      hello.html
      hello.shtml
      hello.csv
      hello.jpg.csv.htm
      

      【讨论】:

        猜你喜欢
        • 2011-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-06
        • 2016-02-13
        • 1970-01-01
        • 2018-07-13
        • 2020-08-17
        相关资源
        最近更新 更多