Я хотел бы повторить все доступные атрибуты в ServletRequest
. Но почему-то при этом отображаются не все доступные атрибуты. Кажется, это происходит потому, что при запросе конкретного атрибута, который не был показан в перечислении, значение печатается правильно.Итерация через все атрибуты ServletRequest
Код для итерации атрибутов и для отображения конкретного свойства
HttpServletRequest request = this.getHttpServletRequest();
Enumeration en = request.getAttributeNames();
while (en.hasMoreElements())
{
Object currentElem = en.nextElement();
System.out.println("currentElem.getClass(): " + currentElem.getClass());
System.out.println("currentElem.toString(): " + currentElem);
}
Object specificAttrValue = request.getAttribute("Shib-Identity-Provider");
System.out.println("\nspecific attr: " + specificAttrValue);
Выхода:
currentElem.getClass(): класс java.lang.String
currentElem.toString(): corsFilter. FILTERED
currentElem.getClass(): класс java.lang.String
currentElem.toString(): org.springframework.web.context.request.RequestContextListener.REQUE ST_ATTRIBUTES
currentElem.getClass(): класс java.lang.String
currentElem.toString(): __spring_security_scpf_applied
currentElem.getClass(): класс java.lang.String
currentElem.toString(): __spring_security_session_mgmt_filter_applied
currentElem .getClass(): класс java.lang.String
currentElem.toString(): org.springframework.security.web.FilterChainProxy.APPLIED
currentElem.getClass(): класс java.lang.String
currentElem.toString (): __spring_security_filterSecurityInterceptor_filterAppliedконкретный атр: https://idp.testshib.org/idp/shibboleth
Почему итерации не показывать Shib-Identity-поставщика как доступный атрибут?
Как перебирать доступные атрибуты, которые являются «скрытыми»?
Примечание. Атрибуты, к которым я хотел бы получить доступ, устанавливаются поставщиком услуг Shibboleth. Сначала запрос отправляется на сервер Apache, затем в Shibboleth, а затем в Providerhib.org Identity Provider, обратно в Shibboleth и в зависимости от содержимого, которое запрос получает за счет некоторых атрибутов (это те, которые мне нужны для доступа), а затем попадает в сервлет Tomcat.
'getAttributeNames()' фактически возвращает 'Перечисление', используя это сделает ваш пример кода легче читать, т.е. отсутствие печати имен классов имен атрибутов (все равно все строки). –
Я прочитал в Javadoc метода, что он возвращает перечисление строк, но при объявлении переменной как «Enumeration» компилятор предупреждает, что требуется непроверенное преобразование в String. –
backendev
Видимо, это происходит как для Tomcat, так и для Glassfish. Люди в списке Shibboleth, похоже, думают, что это ошибка: http://shibboleth.net/pipermail/users/2015-June/022260.html –