如何避免运行在Tomcat上的JSF应用出现408请求超时错误?
解决Apache Tomcat 8.5.14上JSF应用基础认证408超时问题
针对运行在Apache Tomcat/8.5.14的JSF应用,使用基础认证时未授权状态超过20分钟后登录触发408请求超时的问题,可通过以下方案解决:
1. 调整Tomcat会话超时时间
Tomcat默认会话超时为20分钟,这是触发问题的核心原因之一。修改会话超时设置:
- 编辑Tomcat全局
conf/web.xml或应用自身WEB-INF/web.xml中的<session-config>节点:<session-config> <session-timeout>30</session-timeout> <!-- 单位:分钟,根据需求调整 --> </session-config> - 优先以应用自身的
web.xml配置为准,避免影响其他部署在Tomcat上的应用。
2. 调大Tomcat连接超时参数
Tomcat的连接超时设置会影响请求的完整接收时长,修改conf/server.xml中的Connector节点:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="600000" <!-- 10分钟,单位:毫秒 --> keepAliveTimeout="600000" redirectPort="8443" />
connectionTimeout:Tomcat等待客户端发送完整请求的超时时间,调大避免因等待超时返回408。keepAliveTimeout:长连接的保持时间,确保未授权状态下连接不会过早断开。
3. 优化JSF视图状态超时
JSF服务器端保存的视图状态可能因超时失效,导致登录请求异常。在应用WEB-INF/faces-config.xml中添加或修改视图状态配置:
<application> <state-saving-method>server</state-saving-method> <server-state-timeout>1800000</server-state-timeout> <!-- 30分钟,单位:毫秒 --> </application>
该配置控制服务器端视图状态的存活时间,建议与会话超时时间保持一致或略长。
4. 配置错误自动跳转
通过错误页面配置,让408/401错误自动重定向到登录页面,避免用户手动操作返回键:
在应用WEB-INF/web.xml中添加:
<error-page> <error-code>408</error-code> <location>/login.xhtml</location> </error-page> <error-page> <error-code>401</error-code> <location>/login.xhtml</location> </error-page>
用户遇到超时错误时会直接进入登录页面,重新登录即可恢复操作。
5. 延长会话Cookie有效期
确保客户端浏览器不会提前清除Tomcat会话Cookie(JSESSIONID),编辑Tomcatconf/context.xml:
<Context> <CookieProcessor className="org.apache.tomcat.util.http.Rfc6265CookieProcessor" sameSite="Lax" cookieMaxAge="1800" /> <!-- 30分钟,单位:秒 --> </Context>
延长Cookie有效期,与会话超时时间匹配,避免客户端丢失会话标识导致的请求异常。
内容的提问来源于stack exchange,提问作者Nikolay
相关产品推荐
相关产品推荐

