怎么排查服务器HeadersTooLargeException问题
本篇内容介绍了"怎么排查服务器HeadersTooLargeException问题"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
产生原因
公司内部系统,权限点很多,系统cas的权限传输使用了cookie,所有权限组织成字符串,之后写入到cookie中。当管理员登录时,所有权限都将写入到cookie中。cookie又是在页面请求时需要携带到header中,导致出现header内容过长
错误排除过程
当出现管理员不能登录时,第一反应是权限是不是配置错了。但通过对比,权限配置正确。
第二步尝试删除掉新增的权限,登录成功。逐个又添加权限,在添加到最后几个时,出现登录失败的问题
后续查看ng的错误日志,发现ng转发请求时,服务的tomcat返回拒绝请求的错误:
查看出错应用的tomcat的catalina日志,发现错误:
大家都知道,只要看到真正的错误信息的堆栈,问题已经基本可能解决了,下面拿到错误信息google下,在tomcat官方网站有改信息的配置,只要在tomcat的server.xml中修改maxHttpHeaderSize
的值即可变更header长度
修改请求头最大限制后登录成功。 但是这种直接使用cookie存储权限信息的方式,不管是安全问题,还是对服务器的请求压力都很大(每个请求都携带着4K以上的header,想想都恐怖)。其实有cas的TGT(cas中的cookie)的已经可以确定当前登录用户,并可以取到权限。在服务端可以加层缓存每个用户的权限,直接根据token获取权限并鉴权即可。
这是tomcat配置的信息,其中:maxHttpHeaderSize 即为header长度的限制 tomcat默认设置
"怎么排查服务器HeadersTooLargeException问题"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!