从 GWT servlet 访问 AJP 请求数据

Accessing AJP request data from a GWT servlet

我正在尝试创建一个 GWT 应用程序来实现基于 Shibboleth 的授权。因为最终它应该在 "production mode" 中提供,我选择 运行 使用 Tomcat7 的应用程序,但是客户端连接到 Apache2,然后通过 AJP 将请求转发到 Tomcat (使用 mod_proxy_ajp)。

为应用程序提供服务的基本任务有效。但是,我需要以某种方式访问​​ Shibboleth 设置的环境变量。根据 the Shibboleth documentation,如果环境变量以 AJP_ 为前缀(然后删除前缀),环境变量将被转发到 Tomcat,所以我继续以这样的方式配置 Shibboleth将该前缀添加到它设置的所有环境变量中(这是有效的,正如我使用 PHP 脚本确认的那样,该脚本只打印所有环境变量)。

问题在于,当环境变量达到 Tomcat 时,环境变量不再可用作环境变量,而是应该作为 mod_proxy_ajp documentation 短语提供 - 作为 AJP请求属性.

显然,应该使用类似

的方式访问这些类型的属性
getThreadLocalRequest().getSession().getAttribute("uid")

从 servlet 中。尽管我的 PHP 脚本列出了一个名为 AJP_uid 的环境变量,但是 returns null 以上的调用,据我所知,它应该 return 相同的值环境变量 AJP_uid 有。

可以肯定的是,我还尝试使用 AJP_uid 而不是 uid 进行上述调用,以防由于某种原因没有删除前缀,但没有成功。

我做错了什么?

正如@ThomasBroyer 提到的,我还可以直接在 getThreadLocalRequest() 返回的 HttpServletRequest 对象上调用 getAttribute,这确实对我有用:

getThreadLocalRequest().getAttribute("uid")

returns 符合我的预期。 谢谢!