Java 为什么ServletRequest getAttribute()与getAttributeNames()具有不同的属性?
我们在Tomcat的前面运行Apache并使用mod_jk。我们的单点登录Apache模块设置有关用户的信息,我们可以通过调用在Java中检索这些信息 这个很好用。现在我想检索所有属性,并查找前缀为“WEBAUTH_LDAP_”的属性。我用过这个Java 为什么ServletRequest getAttribute()与getAttributeNames()具有不同的属性?,java,servlets,request,Java,Servlets,Request,我们在Tomcat的前面运行Apache并使用mod_jk。我们的单点登录Apache模块设置有关用户的信息,我们可以通过调用在Java中检索这些信息 这个很好用。现在我想检索所有属性,并查找前缀为“WEBAUTH_LDAP_”的属性。我用过这个 Enumeration<String> enumeration = request.getAttributeNames(); Enumeration枚举=request.getAttributeNames(); 获取属性名称。令我惊讶的
Enumeration<String> enumeration = request.getAttributeNames();
Enumeration枚举=request.getAttributeNames();
获取属性名称。令我惊讶的是,没有名为“WEBAUTH\u LDAP\u MOBILE”的属性。
这是预期的吗?有没有办法获取所有属性?JavaDoc使它听起来像getAttribute()中的某些内容也应该在getAttributeNames()中
我们使用的是Tomcat 6.0.28。这是因为使用mod_jk设置的任何属性都可以通过
getAttribute()
使用,但不能通过getAttributeNames()
使用。根据
您可以通过以下方式检索Tomcat上的变量作为请求属性
获取属性(attributeName)。注意,变量通过
JKENVAR不会列在request.getAttributeNames()中
我调试了所有RequestWrappers(根据BalusC的建议),底层有一个内部属性映射,用于getAttributeNames()
。但是,当内部映射的值为null时,getAttribute()
会与另一个对象发生冲突。从javadoc和文档中可以看出,这是按设计工作的
此行为以前被报告为,但修复程序未通过TCK测试:
我只考虑了在返回中包含所有Tomcat内部属性
但这会导致Servlet 2.5 TCK出现问题
期望getAttributeNames()只返回那些
已通过setAttribute()设置
因此,简而言之,
getAttributeNames()
将返回使用setAttribute()
设置的属性,而getAttribute()
可以通过各种其他(内部)方式返回设置的属性。这是因为使用mod_jk设置的任何属性都可以通过getAttribute()
使用,但不能通过getAttributeNames()使用
。根据
您可以通过以下方式检索Tomcat上的变量作为请求属性
获取属性(attributeName)。注意,变量通过
JKENVAR不会列在request.getAttributeNames()中
我调试了所有RequestWrappers(根据BalusC的建议),底层有一个内部属性映射,用于getAttributeNames()
。但是,当内部映射的值为null时,getAttribute()
会与另一个对象发生冲突。从javadoc和文档中可以看出,这是按设计工作的
此行为以前被报告为,但修复程序未通过TCK测试:
我只考虑了在返回中包含所有Tomcat内部属性
但这会导致Servlet 2.5 TCK出现问题
期望getAttributeNames()只返回那些
已通过setAttribute()设置
因此,简而言之,getAttributeNames()
将返回使用setAttribute()
设置的属性,而getAttribute()
可以通过各种其他(内部)方式返回设置的属性
Enumeration<String> enumeration = request.getAttributeNames();