Invalid <url-pattern> [sso.action] in filter mapping

54 篇文章 0 订阅
3 篇文章 0 订阅

Tomcat 8.5.86版本启动web项目报错Caused by: java.lang.IllegalArgumentException: Invalid <url-pattern> [sso.action] in filter mapping

查看项目的web.xml文件相关片段

 <filter-mapping>
        <filter-name>SSOFilter</filter-name>
        <url-pattern>sso.action</url-pattern>
  </filter-mapping>

这里的url-pattern取值可能不符合标准。首先查看servlet 3.1规范

Java Servlet Specifications
Servlet 4.0 specification is JSR 369.
Servlet 3.1 specification is JSR 340.
Servlet 3.0 specification is JSR 315.
Servlet 2.5 is a maintenance release of Servlet 2.4. Both are JSR 154.

在这里插入图片描述
相关的内容如下图所示
在这里插入图片描述
再查看Tomcat的源码org.apache.catalina.core.StandardContext#validateURLPattern

 /**
     * Validate the syntax of a proposed <code>&lt;url-pattern&gt;</code> for conformance with specification
     * requirements.
     *
     * @param urlPattern URL pattern to be validated
     *
     * @return <code>true</code> if the URL pattern is conformant
     */
    private boolean validateURLPattern(String urlPattern) {
        // 不能为空
        if (urlPattern == null) {
            return false;
        }
        // 不能包含换行 制表符
        if (urlPattern.indexOf('\n') >= 0 || urlPattern.indexOf('\r') >= 0) {
            return false;
        }
        // 空字符串代表匹配所有
        if (urlPattern.equals("")) {
            return true;
        }
        // 以 * 开头
        if (urlPattern.startsWith("*.")) {
            if (urlPattern.indexOf('/') < 0) {
                checkUnusualURLPattern(urlPattern);
                return true;
            } else {
                return false;
            }
        }
        // 以/开头不包含*
        if (urlPattern.startsWith("/") && !urlPattern.contains("*.")) {
            checkUnusualURLPattern(urlPattern);
            return true;
        } else {
            return false;
        }
    }

可以看到urlPattern可以为空字符串、至少以*.开头不包含/或者以/开头不不包含*.
checkUnusualURLPattern仅仅是打印日志,不会导致报错

    /**
     * Check for unusual but valid <code>&lt;url-pattern&gt;</code>s. See Bugzilla 34805, 43079 & 43080
     */
    private void checkUnusualURLPattern(String urlPattern) {
        if (log.isInfoEnabled()) {
            // First group checks for '*' or '/foo*' style patterns
            // Second group checks for *.foo.bar style patterns
            if ((urlPattern.endsWith("*") &&
                    (urlPattern.length() < 2 || urlPattern.charAt(urlPattern.length() - 2) != '/')) ||
                    urlPattern.startsWith("*.") && urlPattern.length() > 2 && urlPattern.lastIndexOf('.') > 1) {
                log.info("Suspicious url pattern: \"" + urlPattern + "\"" + " in context [" + getName() + "] - see" +
                        " sections 12.1 and 12.2 of the Servlet specification");
            }
        }
    }

以上实现在Tomcat 9.0.55中没有变化

综合分析,修改web.xml中配置如下(在url-pattern前面添加一个/)

<filter-mapping>
    <filter-name>SSOFilter</filter-name>
    <url-pattern>/sso.action</url-pattern>
</filter-mapping>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lang20150928

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值