tomcat - 在tomcat中使用不同的适配器
问题描述
我想将 tomcat 7 配置为使用与默认 CoyoteAdapter 不同的适配器来处理一些格式错误的 cookie。那可能吗?
原因是我们低于异常
SEVERE: Error processing request
java.lang.IllegalArgumentException: Control character in cookie value or attribute.
at org.apache.tomcat.util.http.CookieSupport.isHttpSeparator(CookieSupport.java:205)
at org.apache.tomcat.util.http.Cookies.getTokenEndPosition(Cookies.java:530)
at org.apache.tomcat.util.http.Cookies.processCookieHeader(Cookies.java:377)
at org.apache.tomcat.util.http.Cookies.processCookies(Cookies.java:195)
at org.apache.tomcat.util.http.Cookies.getCookieCount(Cookies.java:119)
at org.apache.catalina.connector.CoyoteAdapter.parseSessionCookiesId(CoyoteAdapter.java:1089)
at org.apache.catalina.connector.CoyoteAdapter.postParseRequest(CoyoteAdapter.java:796)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:440)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1087)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
解决方案
您无法更改 coyote 适配器,除非您实现自己的org.apache.coyote.Processor
. 但在 tomcat-8 中,您可以更改 cookie 处理器:
- 实施
org.apache.tomcat.util.http.CookieProcessor
- 将jar放入tomcat的
lib
文件夹 - 将 tomcat 配置为使用您自己的 cookie 处理器,方法是将其放在 context.xml 中:
<Context>
<CookieProcessor className="org.example.MonsterCookieProcessor"/>
<Context>
遗憾的是,你不能在 tomcat-7 中这样做,因为 cookie 处理器逻辑是硬编码的CoyoteRequest
:
private Cookies cookies = new Cookies(headers);
推荐阅读
- docker - 如何在 Google Cloud Build 中为 Kaniko 使用非执行入口点(启用构建参数定义)
- plot - 可以在 Vega-Lite 上写 Latex 吗?
- javascript - JS document.getElementById.value 无法正常工作
- slickgrid - Angular slickgrid 编辑处理程序不会在从下拉列表中选择相同的值时触发
- javascript - Javascript,类型错误:Information.map 不是函数 || 如何使用.map?
- ios - 您如何更改 Google Maps 的集群图标?
- python - Delete in Tkinter Python
- java - Talend Studio 中的 java.lang.NoClassDefFoundError
- php - PHP将获取变量添加到URL
- python - 无法从 utils 导入 process_tweets