Customized Snooper JSP and Spring Web Flow XML configuration file.
Shows IPerson user attributes and group memberships.
| <%-- | |
| Licensed to Apereo under one or more contributor license | |
| agreements. See the NOTICE file distributed with this work | |
| for additional information regarding copyright ownership. | |
| Apereo licenses this file to you under the Apache License, | |
| Version 2.0 (the "License"); you may not use this file | |
| except in compliance with the License. You may obtain a | |
| copy of the License at the following location: | |
| http://www.apache.org/licenses/LICENSE-2.0 | |
| Unless required by applicable law or agreed to in writing, | |
| software distributed under the License is distributed on an | |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
| KIND, either express or implied. See the License for the | |
| specific language governing permissions and limitations | |
| under the License. | |
| --%> | |
| <%@ include file="/WEB-INF/jsp/include.jsp" %> | |
| <!-- Portlet --> | |
| <div class="fl-widget portlet snooper view-main" role="section"> | |
| <!-- Portlet Titlebar --> | |
| <div class="fl-widget-titlebar titlebar portlet-titlebar" role="sectionhead"> | |
| <h2 class="title" role="heading">Snooper Information</h2> | |
| </div> | |
| <!-- Portlet Content --> | |
| <div class="fl-widget-content content portlet-content" role="main"> | |
| <!-- Portlet Section --> | |
| <div class="portlet-section" role="region"> | |
| <div class="titlebar"> | |
| <h3 class="title" role="heading">HTTP Request</h3> | |
| </div> | |
| <div class="content"> | |
| <table class="portlet-table table table-hover"> | |
| <thead> | |
| <tr> | |
| <th>Name</th> | |
| <th>Value</th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| <tr> | |
| <td>Request Protocol</td> | |
| <td>${ fn:escapeXml(request.protocol )}</td> | |
| </tr> | |
| <tr> | |
| <td>Request Method</td> | |
| <td>${ fn:escapeXml(request.method )}</td> | |
| </tr> | |
| <tr> | |
| <td>Server Name</td> | |
| <td>${ fn:escapeXml(request.serverName )}</td> | |
| </tr> | |
| <tr> | |
| <td>Server Port</td> | |
| <td>${ fn:escapeXml(request.serverPort )}</td> | |
| </tr> | |
| <tr> | |
| <td>Request URI</td> | |
| <td>${ fn:escapeXml(request.requestURI )}</td> | |
| </tr> | |
| <tr> | |
| <td>Context Path</td> | |
| <td>${ fn:escapeXml(request.contextPath )}</td> | |
| </tr> | |
| <tr> | |
| <td>Servlet Path</td> | |
| <td>${ fn:escapeXml(request.servletPath )}</td> | |
| </tr> | |
| <tr> | |
| <td>Query String</td> | |
| <td>${ fn:escapeXml(request.queryString )}</td> | |
| </tr> | |
| <tr> | |
| <td>Path Info</td> | |
| <td>${ fn:escapeXml(request.pathInfo )}</td> | |
| </tr> | |
| <tr> | |
| <td>Path Translated</td> | |
| <td>${ fn:escapeXml(request.pathTranslated )}</td> | |
| </tr> | |
| <tr> | |
| <td>Content Length</td> | |
| <td>${ fn:escapeXml(request.contentLength )}</td> | |
| </tr> | |
| <tr> | |
| <td>Content Type</td> | |
| <td>${ fn:escapeXml(request.contentType )}</td> | |
| </tr> | |
| <tr> | |
| <td>Remote User</td> | |
| <td>${ fn:escapeXml(request.remoteUser )}</td> | |
| </tr> | |
| <tr> | |
| <td>Remote Address</td> | |
| <td>${ fn:escapeXml(request.remoteAddr )}</td> | |
| </tr> | |
| <tr> | |
| <td>Remote Host</td> | |
| <td>${ fn:escapeXml(request.remoteHost )}</td> | |
| </tr> | |
| <tr> | |
| <td>Authorization Scheme</td> | |
| <td>${ fn:escapeXml(request.authType )}</td> | |
| </tr> | |
| <tr> | |
| <td>Locale</td> | |
| <td>${ fn:escapeXml(request.locale )}</td> | |
| </tr> | |
| </tbody> | |
| </table> | |
| </div> | |
| </div> | |
| <!-- Portlet Section --> | |
| <div class="portlet-section" role="region"> | |
| <div class="titlebar"> | |
| <h3 class="title" role="heading">HTTP Header Info</h3> | |
| </div> | |
| <div class="content"> | |
| <table class="portlet-table table table-hover"> | |
| <thead> | |
| <tr> | |
| <th>Name</th> | |
| <th>Value</th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| <c:forEach items="${ header }" var="h"> | |
| <tr> | |
| <td>${ fn:escapeXml(h.key )}</td> | |
| <td>${ fn:escapeXml(h.value )}</td> | |
| </tr> | |
| </c:forEach> | |
| </tbody> | |
| </table> | |
| </div> | |
| </div> | |
| <!-- User Attributes --> | |
| <div class="portlet-section" role="region"> | |
| <div class="titlebar"> | |
| <h3 class="title" role="heading">uPortal User Attributes</h3> | |
| </div> | |
| <c:catch var="userAttributesError"> | |
| <div class="content"> | |
| <table class="portlet-table table table-hover"> | |
| <thead> | |
| <tr> | |
| <th>Attribute name</th> | |
| <th>Attribute value(s)</th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| <c:forEach | |
| items="${ userAttributes }" | |
| var="personAttributeMapEntry"> | |
| <tr> | |
| <td>${ fn:escapeXml(personAttributeMapEntry.key )}</td> | |
| <td> | |
| <c:forEach | |
| items="${personAttributeMapEntry.value}" | |
| var="attributeValue" | |
| varStatus="attributeValueLoopStatus"> | |
| <div> | |
| <span>${attributeValueLoopStatus.count}:</span> | |
| <span>${attributeValue}</span> | |
| </div> | |
| </c:forEach> | |
| </td> | |
| </tr> | |
| </c:forEach> | |
| </tbody> | |
| </table> | |
| </div> | |
| </c:catch> | |
| <c:if test="${not empty userAttributesError}"> | |
| <div>Unable to show user attributes because of an error in Snooper.</div> | |
| </c:if> | |
| </div> | |
| <!-- Portlet Section --> | |
| <div class="portlet-section" role="region"> | |
| <div class="titlebar"> | |
| <h3 class="title" role="heading"><spring:message code="groups" text="Groups" /></h3> | |
| </div> | |
| <div class="content"> | |
| <ul> | |
| <c:forEach items="${ parents }" var="group"> | |
| <li>${ group.name }</li> | |
| </c:forEach> | |
| </ul> | |
| </div> | |
| </div> | |
| <!-- Portlet Section --> | |
| <div class="portlet-section" role="region"> | |
| <div class="titlebar"> | |
| <h3 class="title" role="heading">Locales</h3> | |
| </div> | |
| <div class="content"> | |
| <table class="portlet-table table table-hover"> | |
| <thead> | |
| <tr> | |
| <th>Name</th> | |
| <th>Code</th> | |
| <th>Language</th> | |
| <th>Country</th> | |
| <th>Variant</th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| <c:forEach items="${ locales }" var="locale"> | |
| <tr> | |
| <td>${ fn:escapeXml(locale.displayName )}</td> | |
| <td>${ fn:escapeXml(locale.locale )}</td> | |
| <td>${ fn:escapeXml(locale.displayLanguage )} (${ fn:escapeXml(locale.locale.language )}, ${ fn:escapeXml(locale.locale.ISO3Language )})</td> | |
| <td>${ fn:escapeXml(locale.displayCountry )} (${ fn:escapeXml(locale.locale.country )}, ${ fn:escapeXml(locale.locale.ISO3Country )})</td> | |
| <td>${ fn:escapeXml(not empty local.locale.variant ? locale.displayVariant + ' (' + locale.locale.variant + ')' : '' )}</td> | |
| </tr> | |
| </c:forEach> | |
| </tbody> | |
| </table> | |
| </div> | |
| </div> | |
| <c:if test="${not empty userAttributesError}"> | |
| <div class="portlet-section" role="region"> | |
| <div class="titlebar"> | |
| <h3 class="title" role="heading">Errors in Snooper</h3> | |
| </div> | |
| <c:catch var="errorReportingError"> | |
| <div class="content"> | |
| <div>Unable to show user attributes because of an error in Snooper.</div> | |
| <div>${userAttributesError}</div> | |
| <c:forEach items="${userAttributesError.stackTrace}" var="stackTraceFrame"> | |
| <div>${stackTraceFrame}</div> | |
| </c:forEach> | |
| </div> | |
| </c:catch> | |
| <c:if test="${not empty errorReportingError}"> | |
| <div>Attempted to display error encountered when examining user attributes, but that attempt | |
| itself gave rise to an error. Giving up.</div> | |
| </c:if> | |
| </div> | |
| </c:if> | |
| </div> <!-- end: portlet-content --> | |
| </div> <!-- end: portlet --> |
| <?xml version="1.0" encoding="UTF-8"?> | |
| <!-- | |
| Licensed to Apereo under one or more contributor license | |
| agreements. See the NOTICE file distributed with this work | |
| for additional information regarding copyright ownership. | |
| Apereo licenses this file to you under the Apache License, | |
| Version 2.0 (the "License"); you may not use this file | |
| except in compliance with the License. You may obtain a | |
| copy of the License at the following location: | |
| http://www.apache.org/licenses/LICENSE-2.0 | |
| Unless required by applicable law or agreed to in writing, | |
| software distributed under the License is distributed on an | |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
| KIND, either express or implied. See the License for the | |
| specific language governing permissions and limitations | |
| under the License. | |
| --> | |
| <flow xmlns="http://www.springframework.org/schema/webflow" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |
| xsi:schemaLocation="http://www.springframework.org/schema/webflow | |
| http://www.springframework.org/schema/webflow/spring-webflow-2.0.xsd"> | |
| <on-start> | |
| <set name="flowScope.currentLocale" | |
| value="userLocaleHelper.getCurrentUserLocale(externalContext.getNativeRequest())"/> | |
| <set name="flowScope.locales" value="userLocaleHelper.getLocales(currentLocale)"/> | |
| </on-start> | |
| <!-- Sole view for this flow --> | |
| <view-state id="snooper"> | |
| <on-render> | |
| <!-- Supply the JSP page with the HttpServletRequest object --> | |
| <set name="flashScope.request" value="portalRequestUtils.getPortletHttpRequest(externalContext.getNativeRequest())"/> | |
| <set name="flashScope.person" value="personManager.getPerson(request)" /> | |
| <set name="flashScope.parents" value="userAccountHelper.getParentGroups(person.name)"/> | |
| <set name="flashScope.userAttributes" value="person.getAttributeMap().entrySet()"/> | |
| </on-render> | |
| </view-state> | |
| </flow> |