You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PrimeFaces 13.0浏览器会话首次请求显示"Invalid Request"问题求助

问题定位

你的问题核心是PrimeFaces 13.0升级后,Chrome首次会话请求被Shiro的InvalidRequestFilter拦截(返回"Invalid Request"),而后续请求正常。这是因为PrimeFaces 13的首次请求格式(比如资源路径、请求头或参数)触发了Shiro默认的非法请求检查规则,导致登录Bean代码未被执行。

配置层面解决方案

以下是通过web.xml或Shiro配置文件解决的可行方案:

1. 调整Shiro InvalidRequestFilter的检查规则

针对Shiro的InvalidRequestFilter,添加放行规则或关闭特定检查项,避免误拦截PrimeFaces的请求。

方式1:在web.xml中配置Shiro Filter的初始化参数

如果使用web.xml配置Shiro,修改filterChainDefinitions,为PrimeFaces资源或登录页面添加自定义检查规则:

<filter>
    <filter-name>shiroFilter</filter-name>
    <filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>
    <init-param>
        <param-name>filterChainDefinitions</param-name>
        <param-value>
            <!-- 放行PrimeFaces资源路径 -->
            /javax.faces.resource/** = anon
            /primefaces/** = anon
            <!-- 对登录页面关闭易触发的检查项:非ASCII字符、分号 -->
            /index.xhtml = authc, invalidRequestFilter[blockNonAscii=false,blockSemicolon=false]
            <!-- 其他业务路径规则 -->
            /** = authc
        </param-value>
    </init-param>
</filter>

方式2:在Shiro.ini中配置

若使用shiro.ini,添加或修改过滤器配置:

[main]
invalidRequestFilter = org.apache.shiro.web.filter.InvalidRequestFilter
# 关闭非ASCII字符拦截
invalidRequestFilter.blockNonAscii = false
# 关闭分号拦截
invalidRequestFilter.blockSemicolon = false

[urls]
/javax.faces.resource/** = anon
/primefaces/** = anon
/index.xhtml = authc, invalidRequestFilter
/** = authc

2. 调整PrimeFaces的请求格式配置

修改PrimeFaces的初始化参数,使其请求格式避开Shiro的拦截规则:

<context-param>
    <!-- 禁用客户端验证,减少首次请求的特殊参数 -->
    <param-name>primefaces.CLIENT_SIDE_VALIDATION</param-name>
    <param-value>false</param-value>
</context-param>
<context-param>
    <!-- 使用JSF默认资源处理器,避免PrimeFaces自定义资源路径触发拦截 -->
    <param-name>primefaces.RESOURCE_HANDLER</param-name>
    <param-value>com.sun.faces.application.resource.ResourceHandlerImpl</param-value>
</context-param>

3. 临时禁用InvalidRequestFilter(应急方案)

若上述方案无效,可临时禁用该过滤器(注意:会降低安全防护,仅作为应急手段):

<filter>
    <filter-name>shiroFilter</filter-name>
    <filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>
    <init-param>
        <param-name>filterChainDefinitions</param-name>
        <param-value>
            /javax.faces.resource/** = anon
            /index.xhtml = authc
            /** = authc
        </param-value>
    </init-param>
</filter>
验证步骤
  1. 清空Chrome的缓存、Cookie,重启浏览器
  2. 首次访问应用,确认是否直接进入index.xhtml且登录Bean断点触发
  3. 查看JBoss日志,确认无InvalidRequestFilter拦截记录

内容的提问来源于stack exchange,提问作者BelaOxmyx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 11:48:33