summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--edit-webapp/WEB-INF/idpui.tld257
-rw-r--r--edit-webapp/WEB-INF/jsp/metadata.jsp23
-rw-r--r--edit-webapp/WEB-INF/jsp/status.jsp99
-rw-r--r--edit-webapp/WEB-INF/lib/README102
-rw-r--r--edit-webapp/WEB-INF/spring.tld482
-rw-r--r--edit-webapp/WEB-INF/web.xml230
6 files changed, 1193 insertions, 0 deletions
diff --git a/edit-webapp/WEB-INF/idpui.tld b/edit-webapp/WEB-INF/idpui.tld
new file mode 100644
index 0000000..2c8abe6
--- /dev/null
+++ b/edit-webapp/WEB-INF/idpui.tld
@@ -0,0 +1,257 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
+ version="2.0">
+
+ <tlib-version>1.0</tlib-version>
+ <short-name>idpui</short-name>
+ <uri>urn:mace:shibboleth:2.0:idp:ui</uri>
+
+ <tag>
+ <description>Service Name - some user friendly description about the relying party</description>
+ <name>serviceName</name>
+ <tag-class>net.shibboleth.idp.ui.taglib.ServiceNameTag</tag-class>
+ <body-content>empty</body-content>
+ <attribute>
+ <name>defaultValue</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>uiContext</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>net.shibboleth.idp.ui.context.RelyingPartyUIContext</type>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>Service Description - taken from the mdui statement</description>
+ <name>serviceDescription</name>
+ <tag-class>net.shibboleth.idp.ui.taglib.ServiceDescriptionTag</tag-class>
+ <body-content>scriptless</body-content>
+ <attribute>
+ <name>uiContext</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>net.shibboleth.idp.ui.context.RelyingPartyUIContext</type>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>Service Contact - information about the contact at the SP</description>
+ <name>serviceContact</name>
+ <tag-class>net.shibboleth.idp.ui.taglib.ServiceContactTag</tag-class>
+ <body-content>scriptless</body-content>
+ <attribute>
+ <name>contactType</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>cssId</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>cssClass</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>cssStyle</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>uiContext</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>net.shibboleth.idp.ui.context.RelyingPartyUIContext</type>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>Service Privacy URL - directly from the metadata if present</description>
+ <name>servicePrivacyURL</name>
+ <tag-class>net.shibboleth.idp.ui.taglib.ServicePrivacyURLTag</tag-class>
+ <body-content>scriptless</body-content>
+ <attribute>
+ <name>linkText</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>cssId</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>cssClass</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>cssStyle</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>uiContext</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>net.shibboleth.idp.ui.context.RelyingPartyUIContext</type>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>Service Information URL - directly from the metadata if present</description>
+ <name>serviceInformationURL</name>
+ <tag-class>net.shibboleth.idp.ui.taglib.ServiceInformationURLTag</tag-class>
+ <body-content>scriptless</body-content>
+ <attribute>
+ <name>linkText</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>cssId</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>cssClass</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>cssStyle</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>uiContext</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>net.shibboleth.idp.ui.context.RelyingPartyUIContext</type>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>Logo for the SP</description>
+ <name>serviceLogo</name>
+ <tag-class>net.shibboleth.idp.ui.taglib.ServiceLogoTag</tag-class>
+ <body-content>scriptless</body-content>
+ <attribute>
+ <name>alt</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>minHeight</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>maxHeight</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>minWidth</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>maxWidth</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>cssId</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>cssClass</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>cssStyle</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>uiContext</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>net.shibboleth.idp.ui.context.RelyingPartyUIContext</type>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>Service Organization Name - directly from the metadata if present</description>
+ <name>organizationName</name>
+ <tag-class>net.shibboleth.idp.ui.taglib.OrganizationNameTag</tag-class>
+ <body-content>scriptless</body-content>
+ <attribute>
+ <name>uiContext</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>net.shibboleth.idp.ui.context.RelyingPartyUIContext</type>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>Service Organization Display Name - directly from the metadata if present</description>
+ <name>organizationDisplayName</name>
+ <tag-class>net.shibboleth.idp.ui.taglib.OrganizationDisplayNameTag</tag-class>
+ <body-content>scriptless</body-content>
+ <attribute>
+ <name>uiContext</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>net.shibboleth.idp.ui.context.RelyingPartyUIContext</type>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>Service Organization URL - directly from the metadata if present</description>
+ <name>organizationURL</name>
+ <tag-class>net.shibboleth.idp.ui.taglib.OrganizationURLTag</tag-class>
+ <body-content>scriptless</body-content>
+ <attribute>
+ <name>linkText</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>cssId</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>cssClass</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>cssStyle</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>uiContext</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>net.shibboleth.idp.ui.context.RelyingPartyUIContext</type>
+ </attribute>
+ </tag>
+
+</taglib> \ No newline at end of file
diff --git a/edit-webapp/WEB-INF/jsp/metadata.jsp b/edit-webapp/WEB-INF/jsp/metadata.jsp
new file mode 100644
index 0000000..09d721b
--- /dev/null
+++ b/edit-webapp/WEB-INF/jsp/metadata.jsp
@@ -0,0 +1,23 @@
+<%@ page import="org.springframework.web.context.WebApplicationContext" %>
+<%@ page import="org.springframework.web.context.support.WebApplicationContextUtils" %>
+<%
+final WebApplicationContext springContext =
+ WebApplicationContextUtils.getRequiredWebApplicationContext(request.getServletContext());
+final String path = springContext.getEnvironment().getProperty("idp.home") + "/metadata/idp-metadata.xml";
+try (final java.io.FileInputStream in = new java.io.FileInputStream(path)) {
+ int i;
+ while ((i = in.read()) != -1) {
+ out.write(i);
+ }
+} catch (final java.io.IOException e) {
+ out.println(e.getMessage());
+ return;
+}
+
+final String acceptHeader = request.getHeader("Accept");
+if (acceptHeader != null && !acceptHeader.contains("application/samlmetadata+xml")) {
+ response.setContentType("application/xml");
+} else {
+ response.setContentType("application/samlmetadata+xml");
+}
+%> \ No newline at end of file
diff --git a/edit-webapp/WEB-INF/jsp/status.jsp b/edit-webapp/WEB-INF/jsp/status.jsp
new file mode 100644
index 0000000..7730901
--- /dev/null
+++ b/edit-webapp/WEB-INF/jsp/status.jsp
@@ -0,0 +1,99 @@
+<%@ page language="java" contentType="text/plain; charset=UTF-8" pageEncoding="UTF-8"%>
+<%@ page trimDirectiveWhitespaces="true" %>
+<%@ page import="java.util.ArrayList" %>
+<%@ page import="java.util.Collection" %>
+<%@ page import="java.util.Collections" %>
+<%@ page import="org.joda.time.DateTime" %>
+<%@ page import="org.joda.time.format.DateTimeFormatter" %>
+<%@ page import="org.joda.time.format.ISODateTimeFormat" %>
+<%@ page import="org.springframework.webflow.execution.RequestContext" %>
+<%@ page import="org.opensaml.saml.metadata.resolver.ChainingMetadataResolver" %>
+<%@ page import="org.opensaml.saml.metadata.resolver.MetadataResolver" %>
+<%@ page import="org.opensaml.saml.metadata.resolver.RefreshableMetadataResolver" %>
+<%@ page import="net.shibboleth.idp.Version" %>
+<%@ page import="net.shibboleth.idp.saml.metadata.impl.RelyingPartyMetadataProvider" %>
+<%@ page import="net.shibboleth.utilities.java.support.component.IdentifiedComponent" %>
+<%@ page import="net.shibboleth.utilities.java.support.service.ReloadableService" %>
+<%@ page import="net.shibboleth.utilities.java.support.service.ServiceableComponent" %>
+<%
+final RequestContext requestContext = (RequestContext) request.getAttribute("flowRequestContext");
+final DateTimeFormatter dateTimeFormatter = ISODateTimeFormat.dateTimeNoMillis();
+final DateTime now = DateTime.now();
+final DateTime startupTime = new DateTime(requestContext.getActiveFlow().getApplicationContext().getStartupDate());
+%>### Operating Environment Information
+operating_system: <%= System.getProperty("os.name") %>
+operating_system_version: <%= System.getProperty("os.version") %>
+operating_system_architecture: <%= System.getProperty("os.arch") %>
+jdk_version: <%= System.getProperty("java.version") %>
+available_cores: <%= Runtime.getRuntime().availableProcessors() %>
+used_memory: <%= Runtime.getRuntime().totalMemory() / 1048576 %> MB
+maximum_memory: <%= Runtime.getRuntime().maxMemory() / 1048576 %> MB
+
+### Identity Provider Information
+idp_version: <%= Version.getVersion() %>
+start_time: <%= startupTime.toString(dateTimeFormatter) %>
+current_time: <%= now.toString(dateTimeFormatter) %>
+uptime: <%= now.getMillis() - startupTime.getMillis() %> ms
+
+<%
+for (final ReloadableService service : (Collection<ReloadableService>) request.getAttribute("services")) {
+ final DateTime successfulReload = service.getLastSuccessfulReloadInstant();
+ final DateTime lastReload = service.getLastReloadAttemptInstant();
+ final Throwable cause = service.getReloadFailureCause();
+
+ out.println("service: " + ((IdentifiedComponent) service).getId());
+ if (successfulReload != null) {
+ out.println("last successful reload attempt: " + successfulReload.toString(dateTimeFormatter));
+ }
+ if (lastReload != null) {
+ out.println("last reload attempt: " + lastReload.toString(dateTimeFormatter));
+ }
+ if (cause != null) {
+ out.println("last failure cause: " + cause.getClass().getName() + ": " + cause.getMessage());
+ }
+
+ out.println();
+
+ if (((IdentifiedComponent) service).getId().contains("Metadata")) {
+ final ServiceableComponent<MetadataResolver> component = service.getServiceableComponent();
+ try {
+ MetadataResolver rootResolver = component.getComponent();
+ Collection<RefreshableMetadataResolver> resolvers = Collections.emptyList();
+
+ // Step down into wrapping component.
+ if (rootResolver instanceof RelyingPartyMetadataProvider) {
+ rootResolver = ((RelyingPartyMetadataProvider) rootResolver).getEmbeddedResolver();
+ }
+
+ if (rootResolver instanceof RefreshableMetadataResolver) {
+ resolvers = Collections.<RefreshableMetadataResolver>singletonList((RefreshableMetadataResolver) rootResolver);
+ } else if (rootResolver instanceof ChainingMetadataResolver) {
+ resolvers = new ArrayList<RefreshableMetadataResolver>();
+ for (final MetadataResolver childResolver : ((ChainingMetadataResolver) rootResolver).getResolvers()) {
+ if (childResolver instanceof RefreshableMetadataResolver) {
+ resolvers.add((RefreshableMetadataResolver) childResolver);
+ }
+ }
+ }
+
+ for (final RefreshableMetadataResolver resolver : resolvers) {
+ final DateTime lastRefresh = resolver.getLastRefresh();
+ final DateTime lastUpdate = resolver.getLastUpdate();
+
+ out.println("\tmetadata source: " + resolver.getId());
+ if (lastRefresh != null) {
+ out.println("\tlast refresh attempt: " + lastRefresh.toString(dateTimeFormatter));
+ }
+ if (lastUpdate != null) {
+ out.println("\tlast update: " + lastUpdate.toString(dateTimeFormatter));
+ }
+ out.println();
+ }
+ } finally {
+ if (null != component) {
+ component.unpinComponent();
+ }
+ }
+ }
+}
+%>
diff --git a/edit-webapp/WEB-INF/lib/README b/edit-webapp/WEB-INF/lib/README
new file mode 100644
index 0000000..f6d0f2e
--- /dev/null
+++ b/edit-webapp/WEB-INF/lib/README
@@ -0,0 +1,102 @@
+Libraries added by default
+-----------
+activation-1.1.jar
+antlr-2.7.7.jar
+aopalliance-1.0.jar
+bcprov-jdk15on-1.51.jar
+c3p0-0.9.2.1.jar
+commons-codec-1.10.jar
+commons-collections-3.2.1.jar
+commons-compiler-2.7.7.jar
+commons-lang-2.4.jar
+cryptacular-1.0.jar
+dom4j-1.6.1.jar
+guava-18.0.jar
+hibernate-commons-annotations-4.0.4.Final.jar
+hibernate-core-4.3.5.Final.jar
+hibernate-entitymanager-4.3.5.Final.jar
+hibernate-jpa-2.1-api-1.0.0.Final.jar
+httpclient-4.3.6.jar
+httpclient-cache-4.3.6.jar
+httpcore-4.3.3.jar
+idp-attribute-api-3.0.0.jar
+idp-attribute-filter-api-3.0.0.jar
+idp-attribute-filter-impl-3.0.0.jar
+idp-attribute-filter-spring-3.0.0.jar
+idp-attribute-resolver-api-3.0.0.jar
+idp-attribute-resolver-impl-3.0.0.jar
+idp-attribute-resolver-spring-3.0.0.jar
+idp-authn-api-3.0.0.jar
+idp-authn-impl-3.0.0.jar
+idp-cas-api-3.0.0.jar
+idp-cas-impl-3.0.0.jar
+idp-consent-3.0.0.jar
+idp-core-3.0.0.jar
+idp-profile-api-3.0.0.jar
+idp-profile-impl-3.0.0.jar
+idp-profile-spring-3.0.0.jar
+idp-saml-api-3.0.0.jar
+idp-saml-impl-3.0.0.jar
+idp-schema-3.0.0.jar
+idp-session-api-3.0.0.jar
+idp-session-impl-3.0.0.jar
+idp-ui-3.0.0.jar
+jandex-1.1.0.Final.jar
+janino-2.7.7.jar
+javassist-3.18.1-GA.jar
+java-support-7.0.0.jar
+javax.json-1.0.4.jar
+javax.json-api-1.0.jar
+jboss-logging-3.1.3.GA.jar
+jboss-logging-annotations-1.2.0.Beta1.jar
+jboss-transaction-api_1.2_spec-1.0.0.Final.jar
+jcl-over-slf4j-1.7.7.jar
+jcommander-1.35.jar
+joda-time-2.6.jar
+jsr305-3.0.0.jar
+ldaptive-1.0.5.jar
+logback-classic-1.1.2.jar
+logback-core-1.1.2.jar
+mail-1.4.7.jar
+mchange-commons-java-0.2.3.4.jar
+ognl-2.6.11.jar
+opensaml-core-3.0.0.jar
+opensaml-messaging-api-3.0.0.jar
+opensaml-messaging-impl-3.0.0.jar
+opensaml-profile-api-3.0.0.jar
+opensaml-profile-impl-3.0.0.jar
+opensaml-saml-api-3.0.0.jar
+opensaml-saml-impl-3.0.0.jar
+opensaml-security-api-3.0.0.jar
+opensaml-security-impl-3.0.0.jar
+opensaml-soap-api-3.0.0.jar
+opensaml-soap-impl-3.0.0.jar
+opensaml-storage-api-3.0.0.jar
+opensaml-storage-impl-3.0.0.jar
+opensaml-xmlsec-api-3.0.0.jar
+opensaml-xmlsec-impl-3.0.0.jar
+README
+slf4j-api-1.7.7.jar
+spring-aop-4.1.3.RELEASE.jar
+spring-beans-4.1.3.RELEASE.jar
+spring-binding-2.4.1.RELEASE.jar
+spring-context-4.1.3.RELEASE.jar
+spring-context-support-4.1.3.RELEASE.jar
+spring-core-4.1.3.RELEASE.jar
+spring-expression-4.1.3.RELEASE.jar
+spring-extensions-5.0.0.jar
+spring-jdbc-4.1.3.RELEASE.jar
+spring-js-2.4.1.RELEASE.jar
+spring-js-resources-2.4.1.RELEASE.jar
+spring-orm-4.1.3.RELEASE.jar
+spring-tx-4.1.3.RELEASE.jar
+spring-web-4.1.3.RELEASE.jar
+spring-webflow-2.4.1.RELEASE.jar
+spring-webmvc-4.1.3.RELEASE.jar
+spymemcached-2.11.4.jar
+stax2-api-3.1.4.jar
+stax-api-1.0-2.jar
+velocity-1.7.jar
+woodstox-core-asl-4.4.1.jar
+xml-apis-1.0.b2.jar
+xmlsec-2.0.2.jar
diff --git a/edit-webapp/WEB-INF/spring.tld b/edit-webapp/WEB-INF/spring.tld
new file mode 100644
index 0000000..d25232e
--- /dev/null
+++ b/edit-webapp/WEB-INF/spring.tld
@@ -0,0 +1,482 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
+ version="2.0">
+
+ <description>Spring Framework JSP Tag Library</description>
+ <tlib-version>4.0</tlib-version>
+ <short-name>spring</short-name>
+ <uri>http://www.springframework.org/tags</uri>
+
+ <tag>
+ <description>
+ Sets default HTML escape value for the current page.
+ Overrides a "defaultHtmlEscape" context-param in web.xml, if any.
+ </description>
+ <name>htmlEscape</name>
+ <tag-class>org.springframework.web.servlet.tags.HtmlEscapeTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>Set the default value for HTML escaping, to be put
+ into the current PageContext.</description>
+ <name>defaultHtmlEscape</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ Escapes its enclosed body content, applying HTML escaping and/or JavaScript escaping.
+ The HTML escaping flag participates in a page-wide or application-wide setting
+ (i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).
+ </description>
+ <name>escapeBody</name>
+ <tag-class>org.springframework.web.servlet.tags.EscapeBodyTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>Set HTML escaping for this tag, as boolean value. Overrides the
+ default HTML escaping setting for the current page.</description>
+ <name>htmlEscape</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>Set JavaScript escaping for this tag, as boolean value.
+ Default is false.</description>
+ <name>javaScriptEscape</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ Retrieves the message with the given code, or text if code isn't resolvable.
+ The HTML escaping flag participates in a page-wide or application-wide setting
+ (i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).
+ </description>
+ <name>message</name>
+ <tag-class>org.springframework.web.servlet.tags.MessageTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>A MessageSourceResolvable argument (direct or through JSP EL).
+ Fits nicely when used in conjunction with Spring's own validation error
+ classes which all implement the MessageSourceResolvable interface. For
+ example, this allows you to iterate over all of the errors in a form,
+ passing each error (using a runtime expression) as the value of this
+ 'message' attribute, thus effecting the easy display of such error
+ messages.</description>
+ <name>message</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>The code (key) to use when looking up the message.
+ If code is not provided, the text attribute will be used.</description>
+ <name>code</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>Set optional message arguments for this tag, as a
+ (comma-)delimited String (each String argument can contain JSP EL),
+ an Object array (used as argument array), or a single Object (used
+ as single argument). You can additionally use nested spring:argument
+ tags.</description>
+ <name>arguments</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>The separator character to be used for splitting the
+ arguments string value; defaults to a 'comma' (',').</description>
+ <name>argumentSeparator</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>Default text to output when a message for the given code
+ could not be found. If both text and code are not set, the tag will
+ output null.</description>
+ <name>text</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>The string to use when binding the result to the page,
+ request, session or application scope. If not specified, the result
+ gets outputted to the writer (i.e. typically directly to the JSP).</description>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>The scope to use when exporting the result to a variable.
+ This attribute is only used when var is also set. Possible values are
+ page, request, session and application.</description>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>Set HTML escaping for this tag, as boolean value.
+ Overrides the default HTML escaping setting for the current page.</description>
+ <name>htmlEscape</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>Set JavaScript escaping for this tag, as boolean value. Default is false.</description>
+ <name>javaScriptEscape</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ Retrieves the theme message with the given code, or text if code isn't resolvable.
+ The HTML escaping flag participates in a page-wide or application-wide setting
+ (i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).
+ </description>
+ <name>theme</name>
+ <tag-class>org.springframework.web.servlet.tags.ThemeTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>A MessageSourceResolvable argument (direct or through JSP EL).</description>
+ <name>message</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>The code (key) to use when looking up the message.
+ If code is not provided, the text attribute will be used.</description>
+ <name>code</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>Set optional message arguments for this tag, as a
+ (comma-)delimited String (each String argument can contain JSP EL),
+ an Object array (used as argument array), or a single Object (used
+ as single argument). You can additionally use nested spring:argument
+ tags.</description>
+ <name>arguments</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>The separator character to be used for splitting the
+ arguments string value; defaults to a 'comma' (',').</description>
+ <name>argumentSeparator</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>Default text to output when a message for the given code
+ could not be found. If both text and code are not set, the tag will
+ output null.</description>
+ <name>text</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>The string to use when binding the result to the page,
+ request, session or application scope. If not specified, the result
+ gets outputted to the writer (i.e. typically directly to the JSP).</description>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>The scope to use when exporting the result to a variable.
+ This attribute is only used when var is also set. Possible values are
+ page, request, session and application.</description>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>Set HTML escaping for this tag, as boolean value.
+ Overrides the default HTML escaping setting for the current page.</description>
+ <name>htmlEscape</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>Set JavaScript escaping for this tag, as boolean value. Default is false.</description>
+ <name>javaScriptEscape</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>Argument tag based on the JSTL fmt:param tag. The purpose is to
+ support arguments inside the spring:message and spring:theme
+ tags.</description>
+ <name>argument</name>
+ <tag-class>org.springframework.web.servlet.tags.ArgumentTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>The value of the argument.</description>
+ <name>value</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>java.lang.Object</type>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ Provides Errors instance in case of bind errors.
+ The HTML escaping flag participates in a page-wide or application-wide setting
+ (i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).
+ </description>
+ <name>hasBindErrors</name>
+ <tag-class>org.springframework.web.servlet.tags.BindErrorsTag</tag-class>
+ <body-content>JSP</body-content>
+ <variable>
+ <name-given>errors</name-given>
+ <variable-class>org.springframework.validation.Errors</variable-class>
+ </variable>
+ <attribute>
+ <description>The name of the bean in the request, that needs to be
+ inspected for errors. If errors are available for this bean, they
+ will be bound under the 'errors' key.</description>
+ <name>name</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>Set HTML escaping for this tag, as boolean value.
+ Overrides the default HTML escaping setting for the current page.</description>
+ <name>htmlEscape</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ Sets a nested path to be used by the bind tag's path.
+ </description>
+ <name>nestedPath</name>
+ <tag-class>org.springframework.web.servlet.tags.NestedPathTag</tag-class>
+ <body-content>JSP</body-content>
+ <variable>
+ <name-given>nestedPath</name-given>
+ <variable-class>java.lang.String</variable-class>
+ </variable>
+ <attribute>
+ <description>Set the path that this tag should apply. E.g. 'customer'
+ to allow bind paths like 'address.street' rather than
+ 'customer.address.street'.</description>
+ <name>path</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ Provides BindStatus object for the given bind path.
+ The HTML escaping flag participates in a page-wide or application-wide setting
+ (i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).
+ </description>
+ <name>bind</name>
+ <tag-class>org.springframework.web.servlet.tags.BindTag</tag-class>
+ <body-content>JSP</body-content>
+ <variable>
+ <name-given>status</name-given>
+ <variable-class>org.springframework.web.servlet.support.BindStatus</variable-class>
+ </variable>
+ <attribute>
+ <description>The path to the bean or bean property to bind status
+ information for. For instance account.name, company.address.zipCode
+ or just employee. The status object will exported to the page scope,
+ specifically for this bean or bean property</description>
+ <name>path</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>Set whether to ignore a nested path, if any. Default is to not ignore.</description>
+ <name>ignoreNestedPath</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>Set HTML escaping for this tag, as boolean value. Overrides
+ the default HTML escaping setting for the current page.</description>
+ <name>htmlEscape</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>
+ Provides transformation of variables to Strings, using an appropriate
+ custom PropertyEditor from BindTag (can only be used inside BindTag).
+ The HTML escaping flag participates in a page-wide or application-wide setting
+ (i.e. by HtmlEscapeTag or a 'defaultHtmlEscape' context-param in web.xml).
+ </description>
+ <name>transform</name>
+ <tag-class>org.springframework.web.servlet.tags.TransformTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>The value to transform. This is the actual object you want
+ to have transformed (for instance a Date). Using the PropertyEditor that
+ is currently in use by the 'spring:bind' tag.</description>
+ <name>value</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>The string to use when binding the result to the page,
+ request, session or application scope. If not specified, the result gets
+ outputted to the writer (i.e. typically directly to the JSP).</description>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>The scope to use when exported the result to a variable.
+ This attribute is only used when var is also set. Possible values are
+ page, request, session and application.</description>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>Set HTML escaping for this tag, as boolean value. Overrides
+ the default HTML escaping setting for the current page.</description>
+ <name>htmlEscape</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>URL tag based on the JSTL c:url tag. This variant is fully
+ backwards compatible with the standard tag. Enhancements include support
+ for URL template parameters.</description>
+ <name>url</name>
+ <tag-class>org.springframework.web.servlet.tags.UrlTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>The URL to build. This value can include template place holders
+ that are replaced with the URL encoded value of the named parameter. Parameters
+ must be defined using the param tag inside the body of this tag.</description>
+ <name>value</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>Specifies a remote application context path. The default is the
+ current application context path.</description>
+ <name>context</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>The name of the variable to export the URL value to.</description>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>The scope for the var. 'application', 'session', 'request' and
+ 'page' scopes are supported. Defaults to page scope. This attribute has no
+ effect unless the var attribute is also defined.</description>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>Set HTML escaping for this tag, as a boolean value. Overrides the
+ default HTML escaping setting for the current page.</description>
+ <name>htmlEscape</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>Set JavaScript escaping for this tag, as a boolean value.
+ Default is false.</description>
+ <name>javaScriptEscape</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>Parameter tag based on the JSTL c:param tag. The sole purpose is to
+ support params inside the spring:url tag.</description>
+ <name>param</name>
+ <tag-class>org.springframework.web.servlet.tags.ParamTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>The name of the parameter.</description>
+ <name>name</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>The value of the parameter.</description>
+ <name>value</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>Evaluates a Spring expression (SpEL) and either prints the result or assigns it to a variable.</description>
+ <name>eval</name>
+ <tag-class>org.springframework.web.servlet.tags.EvalTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>The expression to evaluate.</description>
+ <name>expression</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>The name of the variable to export the evaluation result to.</description>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>The scope for the var. 'application', 'session', 'request' and
+ 'page' scopes are supported. Defaults to page scope. This attribute has no
+ effect unless the var attribute is also defined.</description>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>Set HTML escaping for this tag, as a boolean value. Overrides the
+ default HTML escaping setting for the current page.</description>
+ <name>htmlEscape</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>Set JavaScript escaping for this tag, as a boolean value. Default is false.</description>
+ <name>javaScriptEscape</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <function>
+ <description>Helps to prepare a URL to a Spring MVC controller method.</description>
+ <name>mvcUrl</name>
+ <function-class>org.springframework.web.servlet.mvc.method.annotation.MvcUriComponentsBuilder</function-class>
+ <function-signature>org.springframework.web.servlet.mvc.method.annotation.MvcUriComponentsBuilder.MethodArgumentBuilder fromMappingName(java.lang.String)</function-signature>
+ </function>
+
+</taglib>
diff --git a/edit-webapp/WEB-INF/web.xml b/edit-webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..e012740
--- /dev/null
+++ b/edit-webapp/WEB-INF/web.xml
@@ -0,0 +1,230 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
+
+ <display-name>Shibboleth Identity Provider</display-name>
+
+ <!-- Spring application context files. Files are loaded in the order they appear with subsequent files overwriting
+ same named beans in previous files. -->
+ <context-param>
+ <param-name>contextConfigLocation</param-name>
+ <param-value>${idp.home}/system/conf/global-system.xml</param-value>
+ </context-param>
+
+ <context-param>
+ <param-name>contextClass</param-name>
+ <param-value>net.shibboleth.ext.spring.context.DeferPlaceholderFileSystemXmlWebApplicationContext</param-value>
+ </context-param>
+
+ <context-param>
+ <param-name>contextInitializerClasses</param-name>
+ <param-value>net.shibboleth.idp.spring.IdPPropertiesApplicationContextInitializer</param-value>
+ </context-param>
+
+ <!-- Spring listener used to load up the configuration -->
+ <listener>
+ <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
+ </listener>
+
+ <!-- Filters and filter mappings -->
+ <!-- Try and force I18N, probably won't help much. -->
+ <filter>
+ <filter-name>CharacterEncodingFilter</filter-name>
+ <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
+ <init-param>
+ <param-name>encoding</param-name>
+ <param-value>UTF-8</param-value>
+ </init-param>
+ <init-param>
+ <param-name>forceEncoding</param-name>
+ <param-value>true</param-value>
+ </init-param>
+ </filter>
+ <!-- Lets us lump repeated Set-Cookie headers into one, something containers rarely support. -->
+ <filter>
+ <filter-name>CookieBufferingFilter</filter-name>
+ <filter-class>net.shibboleth.utilities.java.support.net.CookieBufferingFilter</filter-class>
+ </filter>
+ <!-- Automates the unpack and pack of the cookie-based storage model. -->
+ <filter>
+ <filter-name>ClientSessionStorageServiceFilter</filter-name>
+ <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
+ <init-param>
+ <param-name>targetBeanName</param-name>
+ <param-value>shibboleth.ClientSessionStorageService</param-value>
+ </init-param>
+ </filter>
+ <!-- Automates the unpack and pack of the cookie-based storage model. -->
+ <filter>
+ <filter-name>ClientPersistentStorageServiceFilter</filter-name>
+ <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
+ <init-param>
+ <param-name>targetBeanName</param-name>
+ <param-value>shibboleth.ClientPersistentStorageService</param-value>
+ </init-param>
+ </filter>
+ <!-- Automates TLS-based propagation of HttpServletRequest/Response into beans. -->
+ <filter>
+ <filter-name>RequestResponseContextFilter</filter-name>
+ <filter-class>net.shibboleth.utilities.java.support.net.RequestResponseContextFilter</filter-class>
+ </filter>
+ <!-- Manages logging MDC. -->
+ <filter>
+ <filter-name>SL4JMDCServletFilter</filter-name>
+ <filter-class>net.shibboleth.idp.log.SLF4JMDCServletFilter</filter-class>
+ </filter>
+ <filter-mapping>
+ <filter-name>CookieBufferingFilter</filter-name>
+ <url-pattern>/profile/Logout</url-pattern>
+ <url-pattern>/profile/Shibboleth/SSO</url-pattern>
+ <url-pattern>/profile/SAML2/Unsolicited/SSO</url-pattern>
+ <url-pattern>/profile/SAML2/Redirect/SSO</url-pattern>
+ <url-pattern>/profile/SAML2/POST/SSO</url-pattern>
+ <url-pattern>/profile/SAML2/POST-SimpleSign/SSO</url-pattern>
+ <url-pattern>/profile/SAML2/Redirect/SLO</url-pattern>
+ <url-pattern>/profile/SAML2/POST/SLO</url-pattern>
+ <url-pattern>/profile/SAML2/POST-SimpleSign/SLO</url-pattern>
+ <url-pattern>/profile/cas/login</url-pattern>
+ </filter-mapping>
+ <filter-mapping>
+ <filter-name>ClientSessionStorageServiceFilter</filter-name>
+ <url-pattern>/profile/Logout</url-pattern>
+ <url-pattern>/profile/Shibboleth/SSO</url-pattern>
+ <url-pattern>/profile/SAML2/Unsolicited/SSO</url-pattern>
+ <url-pattern>/profile/SAML2/Redirect/SSO</url-pattern>
+ <url-pattern>/profile/SAML2/POST/SSO</url-pattern>
+ <url-pattern>/profile/SAML2/POST-SimpleSign/SSO</url-pattern>
+ <url-pattern>/profile/SAML2/Redirect/SLO</url-pattern>
+ <url-pattern>/profile/SAML2/POST/SLO</url-pattern>
+ <url-pattern>/profile/SAML2/POST-SimpleSign/SLO</url-pattern>
+ <url-pattern>/profile/cas/login</url-pattern>
+ </filter-mapping>
+ <filter-mapping>
+ <filter-name>ClientPersistentStorageServiceFilter</filter-name>
+ <url-pattern>/profile/Shibboleth/SSO</url-pattern>
+ <url-pattern>/profile/SAML2/Unsolicited/SSO</url-pattern>
+ <url-pattern>/profile/SAML2/Redirect/SSO</url-pattern>
+ <url-pattern>/profile/SAML2/POST/SSO</url-pattern>
+ <url-pattern>/profile/SAML2/POST-SimpleSign/SSO</url-pattern>
+ <url-pattern>/profile/cas/login</url-pattern>
+ </filter-mapping>
+ <filter-mapping>
+ <filter-name>CharacterEncodingFilter</filter-name>
+ <url-pattern>/*</url-pattern>
+ </filter-mapping>
+ <filter-mapping>
+ <filter-name>RequestResponseContextFilter</filter-name>
+ <url-pattern>/*</url-pattern>
+ </filter-mapping>
+ <filter-mapping>
+ <filter-name>SL4JMDCServletFilter</filter-name>
+ <url-pattern>/*</url-pattern>
+ </filter-mapping>
+
+ <!-- HTTP headers to every response in order to prevent response caching -->
+ <!-- <filter> <filter-name>IdPNoCacheFilter</filter-name> <filter-class>edu.internet2.middleware.shibboleth.idp.util.NoCacheFilter</filter-class>
+ </filter> <filter-mapping> <filter-name>IdPNoCacheFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> -->
+
+ <!-- Servlets and servlet mappings -->
+ <servlet>
+ <servlet-name>idp</servlet-name>
+ <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
+ <init-param>
+ <param-name>contextConfigLocation</param-name>
+ <param-value>${idp.home}/system/conf/mvc-beans.xml ${idp.home}/system/conf/webflow-config.xml</param-value>
+ </init-param>
+ <init-param>
+ <param-name>contextClass</param-name>
+ <param-value>net.shibboleth.ext.spring.context.DeferPlaceholderFileSystemXmlWebApplicationContext</param-value>
+ </init-param>
+ <load-on-startup>1</load-on-startup>
+ </servlet>
+ <servlet-mapping>
+ <servlet-name>idp</servlet-name>
+ <url-pattern>/status</url-pattern>
+ <url-pattern>/profile/*</url-pattern>
+ </servlet-mapping>
+
+ <!-- Servlet protected by container used for RemoteUser authentication -->
+ <servlet>
+ <servlet-name>RemoteUserAuthHandler</servlet-name>
+ <servlet-class>net.shibboleth.idp.authn.impl.RemoteUserAuthServlet</servlet-class>
+ <load-on-startup>2</load-on-startup>
+ </servlet>
+ <servlet-mapping>
+ <servlet-name>RemoteUserAuthHandler</servlet-name>
+ <url-pattern>/Authn/RemoteUser</url-pattern>
+ </servlet-mapping>
+
+ <!-- Servlet protected by container used for X.509 authentication -->
+ <servlet>
+ <servlet-name>X509AuthHandler</servlet-name>
+ <servlet-class>net.shibboleth.idp.authn.impl.X509AuthServlet</servlet-class>
+ <load-on-startup>3</load-on-startup>
+ </servlet>
+ <servlet-mapping>
+ <servlet-name>X509AuthHandler</servlet-name>
+ <url-pattern>/Authn/X509</url-pattern>
+ </servlet-mapping>
+
+ <!-- Send request for the EntityID to the SAML metadata echoing JSP. -->
+ <servlet>
+ <servlet-name>shibboleth_jsp</servlet-name>
+ <jsp-file>/WEB-INF/jsp/metadata.jsp</jsp-file>
+ </servlet>
+ <servlet-mapping>
+ <servlet-name>shibboleth_jsp</servlet-name>
+ <url-pattern>/shibboleth</url-pattern>
+ </servlet-mapping>
+
+ <!--
+ Uncomment to use container managed authentication. The new servlet spec (3.1)
+ supports "**" as a wildcard syntax to avoid role usage, which is normally desirable.
+ Older containers usually support "*" when proprietary options are used (e.g., Jetty
+ requires setting the Strict property on the SecurityManager.)
+ -->
+ <!--
+ <security-constraint>
+ <display-name>Web Login Service</display-name>
+ <web-resource-collection>
+ <web-resource-name>user authentication</web-resource-name>
+ <url-pattern>/Authn/RemoteUser</url-pattern>
+ <url-pattern>/profile/SAML2/SOAP/ECP</url-pattern>
+ <http-method>GET</http-method>
+ <http-method>POST</http-method>
+ </web-resource-collection>
+ <auth-constraint>
+ <role-name>**</role-name>
+ </auth-constraint>
+ <user-data-constraint>
+ <transport-guarantee>CONFIDENTIAL</transport-guarantee>
+ </user-data-constraint>
+ </security-constraint>
+ -->
+
+ <!-- Uncomment if you want BASIC auth managed by the container. -->
+ <!--
+ <login-config>
+ <auth-method>BASIC</auth-method>
+ <realm-name>Web Login Service</realm-name>
+ </login-config>
+ -->
+
+ <!--
+ Uncomment if you want form-based auth managed by the container.
+ NOTE that the default form-login UI in the IdP is not compatible
+ with this option, and you will need to supply your own JSP form
+ and error page. This is not a recommended approach and is severely
+ limited in functionality as compared to using the IdP's own UI.
+ -->
+ <!--
+ <login-config>
+ <auth-method>FORM</auth-method>
+ <realm-name>Web Login Service</realm-name>
+ <form-login-config>
+ <form-login-page>/login.jsp</form-login-page>
+ <form-error-page>/login-error.jsp</form-error-page>
+ </form-login-config>
+ </login-config>
+ -->
+</web-app>