├── .gitignore
├── README.md
├── pom.xml
├── renovate.json
└── src
└── main
├── java
└── org
│ └── pac4j
│ └── demo
│ └── jee
│ ├── Constants.java
│ ├── CustomAuthorizer.java
│ ├── DemoConfigFactory.java
│ ├── ForceLoginFilter.java
│ └── MySessionListener.java
├── resources
├── application-context.xml
├── logback.xml
├── metadata-okta.xml
├── samlKeystore.jks
├── samltest-providers.xml
└── testshib-providers.xml
└── webapp
├── WEB-INF
└── web.xml
├── basicauth
└── index.jsp
├── cas
└── index.jsp
├── dba
└── index.jsp
├── error401.jsp
├── error403.jsp
├── error500.jsp
├── facebook
├── index.jsp
└── notprotected.jsp
├── facebookadmin
└── index.jsp
├── facebookcustom
└── index.jsp
├── form
└── index.jsp
├── index.html
├── index.jsp
├── jwt.jsp
├── loginForm.jsp
├── oidc
└── index.jsp
├── post
└── index.jsp
├── protected
└── index.jsp
├── rest-jwt
└── index.jsp
├── saml2
└── index.jsp
├── strava
└── index.jsp
└── twitter
└── index.jsp
/.gitignore:
--------------------------------------------------------------------------------
1 | .classpath
2 | .project
3 | .settings/
4 | target/
5 | test-output/
6 | bin/
7 | j2e-pac4j-demo.iml
8 | .idea
9 | sp-metadata.xml
10 | .DS_Store
11 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | This `jee-pac4j-demo` project is a Java web application to test the [jee-pac4j](https://github.com/pac4j/jee-pac4j) security library with various authentication mechanisms: Facebook, Twitter, form, basic auth, CAS, SAML, OpenID Connect, JWT...
6 |
7 | ## Start & test
8 |
9 | Build the project and launch the web app with jetty on [http://localhost:8080](http://localhost:8080):
10 |
11 | cd jee-pac4j-demo
12 | mvn clean package jetty:run
13 |
14 | To test, you can call a protected url by clicking on the "Protected url by **xxx**" link, which will start the authentication process with the **xxx** provider.
15 |
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
2 | 4.0.0
3 | org.pac4j.demo
4 | jee-pac4j-demo
5 | 8.0.0-SNAPSHOT
6 | war
7 | jee-pac4j demo
8 |
9 |
10 |
11 | sonatype-nexus-snapshots
12 | Sonatype Nexus Snapshots
13 | https://oss.sonatype.org/content/repositories/snapshots
14 |
15 | false
16 |
17 |
18 | true
19 |
20 |
21 |
22 |
23 |
24 | 6.1.3
25 | 8.0.1
26 | 17
27 | 6.2.7
28 |
29 |
30 |
31 |
32 | org.pac4j
33 | jakartaee-pac4j
34 | ${jee-pac4j.version}
35 |
36 |
37 | org.pac4j
38 | pac4j-jakartaee
39 | ${pac4jVersion}
40 |
41 |
42 | org.springframework
43 | spring-web
44 | ${spring.version}
45 |
46 |
47 | org.springframework
48 | spring-context
49 | ${spring.version}
50 |
51 |
52 | org.pac4j
53 | pac4j-oauth
54 | ${pac4jVersion}
55 |
56 |
57 | org.pac4j
58 | pac4j-cas
59 | ${pac4jVersion}
60 |
61 |
62 | org.pac4j
63 | pac4j-saml
64 | ${pac4jVersion}
65 |
66 |
67 | org.pac4j
68 | pac4j-gae
69 | ${pac4jVersion}
70 |
71 |
72 | org.pac4j
73 | pac4j-oidc
74 | ${pac4jVersion}
75 |
76 |
77 | org.pac4j
78 | pac4j-http
79 | ${pac4jVersion}
80 |
81 |
82 | org.pac4j
83 | pac4j-ldap
84 | ${pac4jVersion}
85 |
86 |
87 | org.pac4j
88 | pac4j-jwt
89 | ${pac4jVersion}
90 |
91 |
92 | org.pac4j
93 | pac4j-sql
94 | ${pac4jVersion}
95 |
96 |
97 | org.pac4j
98 | pac4j-mongo
99 | ${pac4jVersion}
100 |
101 |
102 | org.pac4j
103 | pac4j-kerberos
104 | ${pac4jVersion}
105 |
106 |
107 | org.pac4j
108 | pac4j-couch
109 | ${pac4jVersion}
110 |
111 |
112 | org.slf4j
113 | jcl-over-slf4j
114 | 2.0.17
115 |
116 |
117 | ch.qos.logback
118 | logback-classic
119 | 1.5.18
120 |
121 |
122 | jakarta.servlet
123 | jakarta.servlet-api
124 | 6.0.0
125 | provided
126 |
127 |
128 | jakarta.servlet.jsp
129 | jakarta.servlet.jsp-api
130 | 3.1.1
131 | provided
132 |
133 |
134 | org.glassfish.web
135 | jakarta.servlet.jsp.jstl
136 | 3.0.1
137 |
138 |
139 |
140 | ${project.artifactId}
141 |
142 |
143 | org.apache.maven.plugins
144 | maven-compiler-plugin
145 | 3.14.0
146 |
147 | ${java.version}
148 | UTF-8
149 |
150 |
151 |
152 | org.apache.maven.plugins
153 | maven-war-plugin
154 | 3.4.0
155 |
156 |
157 | org.eclipse.jetty
158 | jetty-maven-plugin
159 | 11.0.25
160 |
161 |
162 | /
163 |
164 |
165 |
166 |
167 |
168 |
169 |
--------------------------------------------------------------------------------
/renovate.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": [
3 | "config:base"
4 | ]
5 | }
6 |
--------------------------------------------------------------------------------
/src/main/java/org/pac4j/demo/jee/Constants.java:
--------------------------------------------------------------------------------
1 | package org.pac4j.demo.jee;
2 |
3 | public interface Constants {
4 |
5 | String JWT_SALT = "12345678901234567890123456789012";
6 | }
7 |
--------------------------------------------------------------------------------
/src/main/java/org/pac4j/demo/jee/CustomAuthorizer.java:
--------------------------------------------------------------------------------
1 | package org.pac4j.demo.jee;
2 |
3 | import org.apache.commons.lang3.StringUtils;
4 | import org.pac4j.core.authorization.authorizer.ProfileAuthorizer;
5 | import org.pac4j.core.context.WebContext;
6 | import org.pac4j.core.context.session.SessionStore;
7 | import org.pac4j.core.profile.UserProfile;
8 |
9 | import java.util.List;
10 |
11 | public class CustomAuthorizer extends ProfileAuthorizer {
12 |
13 | @Override
14 | public boolean isAuthorized(final WebContext context, final SessionStore sessionStore, final List profiles) {
15 | return isAnyAuthorized(context, sessionStore, profiles);
16 | }
17 |
18 | @Override
19 | public boolean isProfileAuthorized(final WebContext context, final SessionStore sessionStore, final UserProfile profile) {
20 | if (profile == null) {
21 | return false;
22 | }
23 | return StringUtils.startsWith(profile.getUsername(), "jle");
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/java/org/pac4j/demo/jee/DemoConfigFactory.java:
--------------------------------------------------------------------------------
1 | package org.pac4j.demo.jee;
2 |
3 | import org.pac4j.cas.client.CasClient;
4 | import org.pac4j.cas.client.CasProxyReceptor;
5 | import org.pac4j.cas.config.CasConfiguration;
6 | import org.pac4j.core.authorization.authorizer.IsAnonymousAuthorizer;
7 | import org.pac4j.core.authorization.authorizer.IsAuthenticatedAuthorizer;
8 | import org.pac4j.core.authorization.authorizer.RequireAnyRoleAuthorizer;
9 | import org.pac4j.core.client.Clients;
10 | import org.pac4j.core.client.direct.AnonymousClient;
11 | import org.pac4j.core.config.Config;
12 | import org.pac4j.core.config.ConfigFactory;
13 | import org.pac4j.core.logout.handler.DefaultSessionLogoutHandler;
14 | import org.pac4j.core.matching.matcher.PathMatcher;
15 | import org.pac4j.http.client.direct.DirectBasicAuthClient;
16 | import org.pac4j.http.client.direct.ParameterClient;
17 | import org.pac4j.http.client.indirect.FormClient;
18 | import org.pac4j.http.client.indirect.IndirectBasicAuthClient;
19 | import org.pac4j.http.credentials.authenticator.test.SimpleTestUsernamePasswordAuthenticator;
20 | import org.pac4j.jwt.config.signature.SecretSignatureConfiguration;
21 | import org.pac4j.jwt.config.signature.SignatureConfiguration;
22 | import org.pac4j.jwt.credentials.authenticator.JwtAuthenticator;
23 | import org.pac4j.oauth.client.FacebookClient;
24 | import org.pac4j.oauth.client.StravaClient;
25 | import org.pac4j.oauth.client.TwitterClient;
26 | import org.pac4j.oidc.client.GoogleOidcClient;
27 | import org.pac4j.oidc.config.OidcConfiguration;
28 | import org.pac4j.saml.client.SAML2Client;
29 | import org.pac4j.saml.config.SAML2Configuration;
30 |
31 | import java.io.File;
32 | import java.util.ArrayList;
33 | import java.util.List;
34 | import java.util.Optional;
35 |
36 | public class DemoConfigFactory implements ConfigFactory {
37 |
38 | public static Config CONFIG_INSTANCE;
39 |
40 | @Override
41 | public Config build(final Object... parameters) {
42 | final OidcConfiguration oidcConfiguration = new OidcConfiguration();
43 | oidcConfiguration.setClientId("167480702619-8e1lo80dnu8bpk3k0lvvj27noin97vu9.apps.googleusercontent.com");
44 | oidcConfiguration.setSecret("MhMme_Ik6IH2JMnAT6MFIfee");
45 | oidcConfiguration.setUseNonce(true);
46 | //oidcClient.setPreferredJwsAlgorithm(JWSAlgorithm.RS256);
47 | oidcConfiguration.addCustomParam("prompt", "consent");
48 | final GoogleOidcClient oidcClient = new GoogleOidcClient(oidcConfiguration);
49 | oidcClient.setAuthorizationGenerator((ctx, profile) -> { profile.addRole("ROLE_ADMIN"); return Optional.of(profile); });
50 |
51 | final SAML2Configuration cfg = new SAML2Configuration("resource:samlKeystore.jks",
52 | "pac4j-demo-passwd",
53 | "pac4j-demo-passwd",
54 | "resource:samltest-providers.xml");
55 | cfg.setMaximumAuthenticationLifetime(3600);
56 | cfg.setServiceProviderEntityId("http://localhost:8080/callback?client_name=SAML2Client");
57 | cfg.setServiceProviderMetadataPath(new File("sp-metadata.xml").getAbsolutePath());
58 | final SAML2Client saml2Client = new SAML2Client(cfg);
59 |
60 | final FacebookClient facebookClient = new FacebookClient("145278422258960", "be21409ba8f39b5dae2a7de525484da8");
61 | facebookClient.setMultiProfile(true);
62 | final TwitterClient twitterClient = new TwitterClient("CoxUiYwQOSFDReZYdjigBA", "2kAzunH5Btc4gRSaMr7D7MkyoJ5u1VzbOOzE8rBofs");
63 | // HTTP
64 | final FormClient formClient = new FormClient("http://localhost:8080/loginForm.jsp", new SimpleTestUsernamePasswordAuthenticator());
65 | final IndirectBasicAuthClient indirectBasicAuthClient = new IndirectBasicAuthClient(new SimpleTestUsernamePasswordAuthenticator());
66 |
67 | // CAS
68 | final CasConfiguration configuration = new CasConfiguration("https://casserverpac4j.herokuapp.com/login");
69 | //final CasConfiguration configuration = new CasConfiguration("http://localhost:8888/cas/login");
70 | final CasProxyReceptor casProxy = new CasProxyReceptor();
71 | //configuration.setProxyReceptor(casProxy);
72 | final CasClient casClient = new CasClient(configuration);
73 |
74 | /*final DirectCasClient casClient = new DirectCasClient(configuration);
75 | casClient.setName("CasClient");*/
76 |
77 | // Strava
78 | final StravaClient stravaClient = new StravaClient();
79 | stravaClient.setApprovalPrompt("auto");
80 | // client_id
81 | stravaClient.setKey("3945");
82 | // client_secret
83 | stravaClient.setSecret("f03df80582396cddfbe0b895a726bac27c8cf739");
84 | stravaClient.setScope("view_private");
85 |
86 | // REST authent with JWT for a token passed in the url as the token parameter
87 | final List signatures = new ArrayList<>();
88 | signatures.add(new SecretSignatureConfiguration(Constants.JWT_SALT));
89 | ParameterClient parameterClient = new ParameterClient("token", new JwtAuthenticator(signatures));
90 | parameterClient.setSupportGetRequest(true);
91 | parameterClient.setSupportPostRequest(false);
92 |
93 | // basic auth
94 | final DirectBasicAuthClient directBasicAuthClient = new DirectBasicAuthClient(new SimpleTestUsernamePasswordAuthenticator());
95 | /*final DirectDigestAuthClient directBasicAuthClient = new DirectDigestAuthClient((credentials, context) -> {
96 | final CommonProfile profile = new CommonProfile();
97 | final DigestCredentials digestCredentials = (DigestCredentials) credentials;
98 | profile.setId(digestCredentials.getToken());
99 | profile.addAttribute(Pac4jConstants.USERNAME, digestCredentials.getUsername());
100 | credentials.setUserProfile(profile);
101 | });
102 | directBasicAuthClient.setName("DirectBasicAuthClient");*/
103 |
104 | final Clients clients = new Clients("http://localhost:8080/callback", oidcClient, saml2Client, facebookClient,
105 | twitterClient, formClient, indirectBasicAuthClient, casClient, stravaClient, parameterClient,
106 | directBasicAuthClient, new AnonymousClient(), casProxy);
107 |
108 | final Config config = new Config(clients);
109 | config.addAuthorizer("admin", new RequireAnyRoleAuthorizer("ROLE_ADMIN"));
110 | config.addAuthorizer("custom", new CustomAuthorizer());
111 | config.addAuthorizer("mustBeAnon", new IsAnonymousAuthorizer("/?mustBeAnon"));
112 | config.addAuthorizer("mustBeAuth", new IsAuthenticatedAuthorizer("/?mustBeAuth"));
113 | config.addMatcher("excludedPath", new PathMatcher().excludeRegex("^/facebook/notprotected\\.jsp$"));
114 |
115 | final DefaultSessionLogoutHandler defaultCasLogoutHandler = new DefaultSessionLogoutHandler();
116 | defaultCasLogoutHandler.setDestroySession(true);
117 | config.setSessionLogoutHandler(defaultCasLogoutHandler);
118 |
119 | CONFIG_INSTANCE = config;
120 |
121 | return config;
122 | }
123 | }
124 |
--------------------------------------------------------------------------------
/src/main/java/org/pac4j/demo/jee/ForceLoginFilter.java:
--------------------------------------------------------------------------------
1 | package org.pac4j.demo.jee;
2 |
3 | import jakarta.servlet.FilterChain;
4 | import jakarta.servlet.FilterConfig;
5 | import jakarta.servlet.ServletException;
6 | import jakarta.servlet.http.HttpServletRequest;
7 | import jakarta.servlet.http.HttpServletResponse;
8 | import org.pac4j.core.client.Client;
9 | import org.pac4j.core.context.CallContext;
10 | import org.pac4j.core.exception.TechnicalException;
11 | import org.pac4j.core.exception.http.HttpAction;
12 | import org.pac4j.core.util.Pac4jConstants;
13 | import org.pac4j.jee.config.AbstractConfigFilter;
14 | import org.pac4j.jee.context.JEEContext;
15 | import org.pac4j.jee.context.session.JEESessionStore;
16 | import org.pac4j.jee.http.adapter.JEEHttpActionAdapter;
17 |
18 | import java.io.IOException;
19 |
20 | public class ForceLoginFilter extends AbstractConfigFilter {
21 |
22 | @Override
23 | public void init(final FilterConfig filterConfig) throws ServletException {
24 | }
25 |
26 | @Override
27 | protected void internalFilter(final HttpServletRequest request, final HttpServletResponse response,
28 | final FilterChain chain) throws IOException, ServletException {
29 |
30 | final JEEContext context = new JEEContext(request, response);
31 | final Client client = getSharedConfig().getClients().findClient(request.getParameter(Pac4jConstants.DEFAULT_CLIENT_NAME_PARAMETER)).orElseThrow(() -> new TechnicalException("No client found"));
32 | HttpAction action;
33 | try {
34 | action = client.getRedirectionAction(new CallContext(context, new JEESessionStore())).get();
35 | } catch (final HttpAction e) {
36 | action = e;
37 | }
38 | JEEHttpActionAdapter.INSTANCE.adapt(action, context);
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/src/main/java/org/pac4j/demo/jee/MySessionListener.java:
--------------------------------------------------------------------------------
1 | package org.pac4j.demo.jee;
2 |
3 | import jakarta.servlet.http.HttpSessionEvent;
4 | import jakarta.servlet.http.HttpSessionListener;
5 | import org.slf4j.Logger;
6 | import org.slf4j.LoggerFactory;
7 |
8 | public class MySessionListener implements HttpSessionListener {
9 |
10 | private static final Logger logger = LoggerFactory.getLogger(MySessionListener.class);
11 |
12 | @Override
13 | public void sessionCreated(final HttpSessionEvent event) {
14 | logger.debug("Session created");
15 | }
16 |
17 | @Override
18 | public void sessionDestroyed(HttpSessionEvent var1) {
19 | logger.debug("Session destroyed");
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/src/main/resources/application-context.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/main/resources/logback.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | JEE PAC4J DEMO %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/main/resources/metadata-okta.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | MIIDpDCCAoygAwIBAgIGAVFtfuF5MA0GCSqGSIb3DQEBBQUAMIGSMQswCQYDVQQGEwJVUzETMBEG
9 | A1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEU
10 | MBIGA1UECwwLU1NPUHJvdmlkZXIxEzARBgNVBAMMCmRldi00MjU5NTQxHDAaBgkqhkiG9w0BCQEW
11 | DWluZm9Ab2t0YS5jb20wHhcNMTUxMjA0MTQ1NTUwWhcNMjUxMjA0MTQ1NjUwWjCBkjELMAkGA1UE
12 | BhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xDTALBgNV
13 | BAoMBE9rdGExFDASBgNVBAsMC1NTT1Byb3ZpZGVyMRMwEQYDVQQDDApkZXYtNDI1OTU0MRwwGgYJ
14 | KoZIhvcNAQkBFg1pbmZvQG9rdGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
15 | gtbqJHZYUwLGA9zb4OX2Xdb/2+8gIx8d9g6q3INMRxoPvElh7znRHLOpL8h0iEyhMyXfmgXkJf1U
16 | eUOWUZa0rFIKoY0NSqCSlX44ZuseVwUsDA/vtVq/FSZ5/RAU/iMfbvWfCITVoLsjLHKr+3cnaN/0
17 | 6coe6mOtMJGqWoN/EeH+3lwyFDuk0vbxGqlrn/aXlHLWaSyFJ4CnMU/y0gxiF7kDXFGrj44fkDV9
18 | MJ8k7MjM6WDC5b9eBcfjCCSSR0DZ+0XeGi8VsewRNvmmlGvMuNJJv0TaJNBtOCP4kEClHQIyaBQZ
19 | X3wXi9XiQNwofQTj4qoJ1fHriGVwhS7UI8Xe3wIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQB19OcZ
20 | j6x0wVOhjSXTPbJtC1m1E01lgk3+kHzGAk+U5JsYDhEtEOZ2cZ7XIAYjab4RcdAd4hrRbPcupfIB
21 | dHLBeBnWur6C7DpN1mZbfxwvDp1d60wRi1A5PmcrewoQDuQSI3zrIhb+FcqtCewl7Ku1pNX0Nng4
22 | NL95pwiYkOoqfoBTz1WOFq+dsAygPoyneHIARyftdbFQpHmlN+/RRudH6WqAQJ1mXYP9+8tv+yuY
23 | jhy0VURe5ZkFEIO3WtxFxMBj6Z8L1edngYVj3f8t8FmuFxYCqHw0Ex98XLMd0XlL06z4qmE4uJdg
24 | VlDGyllCF+le88VWtD7AB+QxoA/nZxMs
25 |
26 |
27 |
28 |
29 |
30 | urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
31 |
32 |
33 | urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified
34 |
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/src/main/resources/samlKeystore.jks:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pac4j/jee-pac4j-demo/06a2100a360369cf7deaab277f24fc92ee696e44/src/main/resources/samlKeystore.jks
--------------------------------------------------------------------------------
/src/main/resources/samltest-providers.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
16 | samltest.id
17 |
18 |
20 |
21 | SAMLtest IdP
22 | A free and basic IdP for testing SAML deployments
23 | https://samltest.id/saml/logo.png
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 | MIIDETCCAfmgAwIBAgIUZRpDhkNKl5eWtJqk0Bu1BgTTargwDQYJKoZIhvcNAQEL
32 | BQAwFjEUMBIGA1UEAwwLc2FtbHRlc3QuaWQwHhcNMTgwODI0MjExNDEwWhcNMzgw
33 | ODI0MjExNDEwWjAWMRQwEgYDVQQDDAtzYW1sdGVzdC5pZDCCASIwDQYJKoZIhvcN
34 | AQEBBQADggEPADCCAQoCggEBAJrh9/PcDsiv3UeL8Iv9rf4WfLPxuOm9W6aCntEA
35 | 8l6c1LQ1Zyrz+Xa/40ZgP29ENf3oKKbPCzDcc6zooHMji2fBmgXp6Li3fQUzu7yd
36 | +nIC2teejijVtrNLjn1WUTwmqjLtuzrKC/ePoZyIRjpoUxyEMJopAd4dJmAcCq/K
37 | k2eYX9GYRlqvIjLFoGNgy2R4dWwAKwljyh6pdnPUgyO/WjRDrqUBRFrLQJorR2kD
38 | c4seZUbmpZZfp4MjmWMDgyGM1ZnR0XvNLtYeWAyt0KkSvFoOMjZUeVK/4xR74F8e
39 | 8ToPqLmZEg9ZUx+4z2KjVK00LpdRkH9Uxhh03RQ0FabHW6UCAwEAAaNXMFUwHQYD
40 | VR0OBBYEFJDbe6uSmYQScxpVJhmt7PsCG4IeMDQGA1UdEQQtMCuCC3NhbWx0ZXN0
41 | LmlkhhxodHRwczovL3NhbWx0ZXN0LmlkL3NhbWwvaWRwMA0GCSqGSIb3DQEBCwUA
42 | A4IBAQBNcF3zkw/g51q26uxgyuy4gQwnSr01Mhvix3Dj/Gak4tc4XwvxUdLQq+jC
43 | cxr2Pie96klWhY/v/JiHDU2FJo9/VWxmc/YOk83whvNd7mWaNMUsX3xGv6AlZtCO
44 | L3JhCpHjiN+kBcMgS5jrtGgV1Lz3/1zpGxykdvS0B4sPnFOcaCwHe2B9SOCWbDAN
45 | JXpTjz1DmJO4ImyWPJpN1xsYKtm67Pefxmn0ax0uE2uuzq25h0xbTkqIQgJzyoE/
46 | DPkBFK1vDkMfAW11dQ0BXatEnW7Gtkc0lh2/PIbHWj4AzxYMyBf5Gy6HSVOftwjC
47 | voQR2qr2xJBixsg+MIORKtmKHLfU
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 | MIIDEjCCAfqgAwIBAgIVAMECQ1tjghafm5OxWDh9hwZfxthWMA0GCSqGSIb3DQEB
58 | CwUAMBYxFDASBgNVBAMMC3NhbWx0ZXN0LmlkMB4XDTE4MDgyNDIxMTQwOVoXDTM4
59 | MDgyNDIxMTQwOVowFjEUMBIGA1UEAwwLc2FtbHRlc3QuaWQwggEiMA0GCSqGSIb3
60 | DQEBAQUAA4IBDwAwggEKAoIBAQC0Z4QX1NFKs71ufbQwoQoW7qkNAJRIANGA4iM0
61 | ThYghul3pC+FwrGv37aTxWXfA1UG9njKbbDreiDAZKngCgyjxj0uJ4lArgkr4AOE
62 | jj5zXA81uGHARfUBctvQcsZpBIxDOvUUImAl+3NqLgMGF2fktxMG7kX3GEVNc1kl
63 | bN3dfYsaw5dUrw25DheL9np7G/+28GwHPvLb4aptOiONbCaVvh9UMHEA9F7c0zfF
64 | /cL5fOpdVa54wTI0u12CsFKt78h6lEGG5jUs/qX9clZncJM7EFkN3imPPy+0HC8n
65 | spXiH/MZW8o2cqWRkrw3MzBZW3Ojk5nQj40V6NUbjb7kfejzAgMBAAGjVzBVMB0G
66 | A1UdDgQWBBQT6Y9J3Tw/hOGc8PNV7JEE4k2ZNTA0BgNVHREELTArggtzYW1sdGVz
67 | dC5pZIYcaHR0cHM6Ly9zYW1sdGVzdC5pZC9zYW1sL2lkcDANBgkqhkiG9w0BAQsF
68 | AAOCAQEASk3guKfTkVhEaIVvxEPNR2w3vWt3fwmwJCccW98XXLWgNbu3YaMb2RSn
69 | 7Th4p3h+mfyk2don6au7Uyzc1Jd39RNv80TG5iQoxfCgphy1FYmmdaSfO8wvDtHT
70 | TNiLArAxOYtzfYbzb5QrNNH/gQEN8RJaEf/g/1GTw9x/103dSMK0RXtl+fRs2nbl
71 | D1JJKSQ3AdhxK/weP3aUPtLxVVJ9wMOQOfcy02l+hHMb6uAjsPOpOVKqi3M8XmcU
72 | ZOpx4swtgGdeoSpeRyrtMvRwdcciNBp9UZome44qZAYH1iqrpmmjsfI9pJItsgWu
73 | 3kXPjhSfj1AJGR1l9JGvJrHki1iHTA==
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 | MIIDEjCCAfqgAwIBAgIVAPVbodo8Su7/BaHXUHykx0Pi5CFaMA0GCSqGSIb3DQEB
84 | CwUAMBYxFDASBgNVBAMMC3NhbWx0ZXN0LmlkMB4XDTE4MDgyNDIxMTQwOVoXDTM4
85 | MDgyNDIxMTQwOVowFjEUMBIGA1UEAwwLc2FtbHRlc3QuaWQwggEiMA0GCSqGSIb3
86 | DQEBAQUAA4IBDwAwggEKAoIBAQCQb+1a7uDdTTBBFfwOUun3IQ9nEuKM98SmJDWa
87 | MwM877elswKUTIBVh5gB2RIXAPZt7J/KGqypmgw9UNXFnoslpeZbA9fcAqqu28Z4
88 | sSb2YSajV1ZgEYPUKvXwQEmLWN6aDhkn8HnEZNrmeXihTFdyr7wjsLj0JpQ+VUlc
89 | 4/J+hNuU7rGYZ1rKY8AA34qDVd4DiJ+DXW2PESfOu8lJSOteEaNtbmnvH8KlwkDs
90 | 1NvPTsI0W/m4SK0UdXo6LLaV8saIpJfnkVC/FwpBolBrRC/Em64UlBsRZm2T89ca
91 | uzDee2yPUvbBd5kLErw+sC7i4xXa2rGmsQLYcBPhsRwnmBmlAgMBAAGjVzBVMB0G
92 | A1UdDgQWBBRZ3exEu6rCwRe5C7f5QrPcAKRPUjA0BgNVHREELTArggtzYW1sdGVz
93 | dC5pZIYcaHR0cHM6Ly9zYW1sdGVzdC5pZC9zYW1sL2lkcDANBgkqhkiG9w0BAQsF
94 | AAOCAQEABZDFRNtcbvIRmblnZItoWCFhVUlq81ceSQddLYs8DqK340//hWNAbYdj
95 | WcP85HhIZnrw6NGCO4bUipxZXhiqTA/A9d1BUll0vYB8qckYDEdPDduYCOYemKkD
96 | dmnHMQWs9Y6zWiYuNKEJ9mf3+1N8knN/PK0TYVjVjXAf2CnOETDbLtlj6Nqb8La3
97 | sQkYmU+aUdopbjd5JFFwbZRaj6KiHXHtnIRgu8sUXNPrgipUgZUOVhP0C0N5OfE4
98 | JW8ZBrKgQC/6vJ2rSa9TlzI6JAa5Ww7gMXMP9M+cJUNQklcq+SBnTK8G+uBHgPKR
99 | zBDsMIEzRtQZm4GIoHJae4zmnCekkQ==
100 |
101 |
102 |
103 |
104 |
105 |
106 |
108 |
109 |
110 |
111 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 | SAMLtest SP
161 | A free and basic SP for testing SAML deployments
162 | https://samltest.id/saml/logo.png
163 |
164 |
165 |
166 |
170 |
171 |
172 |
173 |
174 | MIIERTCCAq2gAwIBAgIJAKmtzjCD1+tqMA0GCSqGSIb3DQEBCwUAMDUxMzAxBgNV
175 | BAMTKmlwLTE3Mi0zMS0yOC02NC51cy13ZXN0LTIuY29tcHV0ZS5pbnRlcm5hbDAe
176 | Fw0xODA4MTgyMzI0MjNaFw0yODA4MTUyMzI0MjNaMDUxMzAxBgNVBAMTKmlwLTE3
177 | Mi0zMS0yOC02NC51cy13ZXN0LTIuY29tcHV0ZS5pbnRlcm5hbDCCAaIwDQYJKoZI
178 | hvcNAQEBBQADggGPADCCAYoCggGBALhUlY3SkIOze+l8y6dBzM6p7B8OykJWlwiz
179 | szU16Lih8D7KLhNJfahoVxbPxB3YFM/81PJLOeK2krvJ5zY6CJyQY3sPQAkZKI7I
180 | 8qq9lmZ2g4QPqybNstXS6YUXJNUt/ixbbK/N97+LKTiSutbD1J7AoFnouMuLjlhN
181 | 5VRZ43jez4xLSHVZaYuUFKn01Y9oLKbj46LQnZnJCAGpTgPqEQJr6GpVGw43bKyU
182 | pGoaPrdDRgRgtPMUWgFDkgcI3QiV1lsKfBs1t1E2UA7ACFnlJZpEuBtwgivzo3Ve
183 | itiSaF3Jxh25EY5/vABpcgQQRz3RH2l8MMKdRsxb8VT3yh2S+CX55s+cN67LiCPr
184 | 6f2u+KS1iKfB9mWN6o2S4lcmo82HIBbsuXJV0oA1HrGMyyc4Y9nng/I8iuAp8or1
185 | JrWRHQ+8NzO85DWK0rtvtLPxkvw0HK32glyuOP/9F05Z7+tiVIgn67buC0EdoUm1
186 | RSpibqmB1ST2PikslOlVbJuy4Ah93wIDAQABo1gwVjA1BgNVHREELjAsgippcC0x
187 | NzItMzEtMjgtNjQudXMtd2VzdC0yLmNvbXB1dGUuaW50ZXJuYWwwHQYDVR0OBBYE
188 | FAdsTxYfulJ5yunYtgYJHC9IcevzMA0GCSqGSIb3DQEBCwUAA4IBgQB3J6i7Krei
189 | HL8NPMglfWLHk1PZOgvIEEpKL+GRebvcbyqgcuc3VVPylq70VvGqhJxp1q/mzLfr
190 | aUiypzfWFGm9zfwIg0H5TqRZYEPTvgIhIICjaDWRwZBDJG8D5G/KoV60DlUG0crP
191 | BlIuCCr/SRa5ZoDQqvucTfr3Rx4Ha6koXFSjoSXllR+jn4GnInhm/WH137a+v35P
192 | UcffNxfuehoGn6i4YeXF3cwJK4e35cOFW+dLbnaLk+Ty7HOGvpw86h979C6mJ9qE
193 | HYgq9rQyzlSPbLZGZSgVcIezunOaOsWm81BsXRNNJjzHGCqKf8RMhd8oZP55+2/S
194 | VRBwnkGyUNCuDPrJcymC95ZT2NW/KeWkz28HF2i31xQmecT2r3lQRSM8acvOXQsN
195 | EDCDvJvCzJT9c2AnsnO24r6arPXs/UWAxOI+MjclXPLkLD6uTHV+Oo8XZ7bOjegD
196 | 5hL6/bKUWnNMurQNGrmi/jvqsCFLDKftl7ajuxKjtodnSuwhoY7NQy8=
197 |
198 |
199 |
200 |
201 |
204 |
205 |
206 |
207 |
208 | MIIERTCCAq2gAwIBAgIJAKGA/tV7hXUvMA0GCSqGSIb3DQEBCwUAMDUxMzAxBgNV
209 | BAMTKmlwLTE3Mi0zMS0yOC02NC51cy13ZXN0LTIuY29tcHV0ZS5pbnRlcm5hbDAe
210 | Fw0xODA4MTgyMzI0MjVaFw0yODA4MTUyMzI0MjVaMDUxMzAxBgNVBAMTKmlwLTE3
211 | Mi0zMS0yOC02NC51cy13ZXN0LTIuY29tcHV0ZS5pbnRlcm5hbDCCAaIwDQYJKoZI
212 | hvcNAQEBBQADggGPADCCAYoCggGBANoi7TtbPz5DD5b+pGj2bWHUWcOm135Dl+kf
213 | KWcJV6x4Z4VRMa33nwSfFg6U0DhPaA6rYr8BfcmCIY4V4cGlJkLNsYbgbZNnrLh2
214 | 3mj7jkaUeyv/DlGtLBcqr0gP6eDtcOf3MMGAkhROcicMj6i+uF6hqLDh4eNcpqEV
215 | DVn+ADBsosIPiAx+RkcyZkfAF3UeGEV5WTSiQw7qYpI7x+c4ViiBzV4waBgXjvNN
216 | 72Dqlc01AylpmMKaUPfxIpPC+Ctr0bHu5xn7NxMS8Zt5NDWsP9T15qrpYatW68sX
217 | VyE5nJRYpiRiRbo8i7QpUEya+TkXEI8PVD3KBw9UwhqL8qPPe0T+EeaawF6BVRTE
218 | Pc+Mn4lGBr4cCFcGk/PLHeyksgPdjNmO1g7y5TWQzu21WzkXRTWJq7wGwWeW6Nrc
219 | NqweYPLbXEo0JlmHqunkUs+NsLQAFqSPX02P2xzkA/eOU2o/jN4jAPNpzqxJouvm
220 | iWGXl8Qy4U7vQZ0tGvlTDSltATOQ/QIDAQABo1gwVjA1BgNVHREELjAsgippcC0x
221 | NzItMzEtMjgtNjQudXMtd2VzdC0yLmNvbXB1dGUuaW50ZXJuYWwwHQYDVR0OBBYE
222 | FBBtS9YNKSIwViH37GJCTxjNBzLAMA0GCSqGSIb3DQEBCwUAA4IBgQDWXcaI7zMn
223 | hGsLVTUA6dgzZCa88QkN/Z6n7lCY2oaKj1neBAWA1Mxg7GBJsmLOrHN8ie0D/uKA
224 | F+7NqKCXYqd0PpTX7c1NICL92DvbugG/Ow50j5Dw6rU4Y8dPS7Y/T1ddbT2F9/5l
225 | HCIWP/O2E9HREJ0JAIbu/Mi0CE1qui2aSJMDWKuiGK63M/7fvP51m6xSJOfZBhmj
226 | gllIwEhIzfh4hVPhH0C7iqVls34UyLCZ8IZOCuGPJyTaJN6Pi3Uo1Otkz/1igN5M
227 | pQhVaeYG7SMgha6skTLrVXTt4CuMVsOZ6cG3kHqw8XZoRld+I50iyHqansf5qwzm
228 | NoPeXyjGRFQzV/EH3SUu8eAISTt9pfirwjKsVNHrmMRnQEB/hJYYbTWSsvdS8ghw
229 | 7a/A0EKQPVaZGCP/hcpt9JMMb66y2L8VgBbb6aTsR+Uabf6aiMnj1UBMUz9yaMka
230 | kKM7e66uHdXUDZ/s8F5rPOGCK+O8O6EsLRf8XetRWLa1TXRDkJZVPX4=
231 |
232 |
233 |
234 |
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 |
248 |
249 |
250 |
251 |
252 |
253 |
254 |
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
--------------------------------------------------------------------------------
/src/main/resources/testshib-providers.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
26 |
27 | testshib.org
28 |
29 | TestShib Test IdP
30 | TestShib IdP. Use this as a source of attributes
31 | for your test SP.
32 | https://www.testshib.org/testshibtwo.jpg
34 |
35 |
36 |
37 |
75 |
76 |
77 |
78 |
79 |
80 |
81 | MIIDAzCCAeugAwIBAgIVAPX0G6LuoXnKS0Muei006mVSBXbvMA0GCSqGSIb3DQEB
82 | CwUAMBsxGTAXBgNVBAMMEGlkcC50ZXN0c2hpYi5vcmcwHhcNMTYwODIzMjEyMDU0
83 | WhcNMzYwODIzMjEyMDU0WjAbMRkwFwYDVQQDDBBpZHAudGVzdHNoaWIub3JnMIIB
84 | IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAg9C4J2DiRTEhJAWzPt1S3ryh
85 | m3M2P3hPpwJwvt2q948vdTUxhhvNMuc3M3S4WNh6JYBs53R+YmjqJAII4ShMGNEm
86 | lGnSVfHorex7IxikpuDPKV3SNf28mCAZbQrX+hWA+ann/uifVzqXktOjs6DdzdBn
87 | xoVhniXgC8WCJwKcx6JO/hHsH1rG/0DSDeZFpTTcZHj4S9MlLNUtt5JxRzV/MmmB
88 | 3ObaX0CMqsSWUOQeE4nylSlp5RWHCnx70cs9kwz5WrflnbnzCeHU2sdbNotBEeTH
89 | ot6a2cj/pXlRJIgPsrL/4VSicPZcGYMJMPoLTJ8mdy6mpR6nbCmP7dVbCIm/DQID
90 | AQABoz4wPDAdBgNVHQ4EFgQUUfaDa2mPi24x09yWp1OFXmZ2GPswGwYDVR0RBBQw
91 | EoIQaWRwLnRlc3RzaGliLm9yZzANBgkqhkiG9w0BAQsFAAOCAQEASKKgqTxhqBzR
92 | OZ1eVy++si+eTTUQZU4+8UywSKLia2RattaAPMAcXUjO+3cYOQXLVASdlJtt+8QP
93 | dRkfp8SiJemHPXC8BES83pogJPYEGJsKo19l4XFJHPnPy+Dsn3mlJyOfAa8RyWBS
94 | 80u5lrvAcr2TJXt9fXgkYs7BOCigxtZoR8flceGRlAZ4p5FPPxQR6NDYb645jtOT
95 | MVr3zgfjP6Wh2dt+2p04LG7ENJn8/gEwtXVuXCsPoSCDx9Y0QmyXTJNdV1aB0AhO
96 | RkWPlFYwp+zOyOIR+3m1+pqWFpn0eT/HrxpdKa74FA3R2kq4R7dXe4G0kUgXTdqX
97 | MLRKhDgdmA==
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
112 |
115 |
116 | urn:mace:shibboleth:1.0:nameIdentifier
117 | urn:oasis:names:tc:SAML:2.0:nameid-format:transient
118 |
119 |
121 |
123 |
125 |
127 |
128 |
129 |
130 |
132 |
133 |
171 |
172 |
173 |
174 |
175 |
176 |
177 | MIIDAzCCAeugAwIBAgIVAPX0G6LuoXnKS0Muei006mVSBXbvMA0GCSqGSIb3DQEB
178 | CwUAMBsxGTAXBgNVBAMMEGlkcC50ZXN0c2hpYi5vcmcwHhcNMTYwODIzMjEyMDU0
179 | WhcNMzYwODIzMjEyMDU0WjAbMRkwFwYDVQQDDBBpZHAudGVzdHNoaWIub3JnMIIB
180 | IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAg9C4J2DiRTEhJAWzPt1S3ryh
181 | m3M2P3hPpwJwvt2q948vdTUxhhvNMuc3M3S4WNh6JYBs53R+YmjqJAII4ShMGNEm
182 | lGnSVfHorex7IxikpuDPKV3SNf28mCAZbQrX+hWA+ann/uifVzqXktOjs6DdzdBn
183 | xoVhniXgC8WCJwKcx6JO/hHsH1rG/0DSDeZFpTTcZHj4S9MlLNUtt5JxRzV/MmmB
184 | 3ObaX0CMqsSWUOQeE4nylSlp5RWHCnx70cs9kwz5WrflnbnzCeHU2sdbNotBEeTH
185 | ot6a2cj/pXlRJIgPsrL/4VSicPZcGYMJMPoLTJ8mdy6mpR6nbCmP7dVbCIm/DQID
186 | AQABoz4wPDAdBgNVHQ4EFgQUUfaDa2mPi24x09yWp1OFXmZ2GPswGwYDVR0RBBQw
187 | EoIQaWRwLnRlc3RzaGliLm9yZzANBgkqhkiG9w0BAQsFAAOCAQEASKKgqTxhqBzR
188 | OZ1eVy++si+eTTUQZU4+8UywSKLia2RattaAPMAcXUjO+3cYOQXLVASdlJtt+8QP
189 | dRkfp8SiJemHPXC8BES83pogJPYEGJsKo19l4XFJHPnPy+Dsn3mlJyOfAa8RyWBS
190 | 80u5lrvAcr2TJXt9fXgkYs7BOCigxtZoR8flceGRlAZ4p5FPPxQR6NDYb645jtOT
191 | MVr3zgfjP6Wh2dt+2p04LG7ENJn8/gEwtXVuXCsPoSCDx9Y0QmyXTJNdV1aB0AhO
192 | RkWPlFYwp+zOyOIR+3m1+pqWFpn0eT/HrxpdKa74FA3R2kq4R7dXe4G0kUgXTdqX
193 | MLRKhDgdmA==
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
207 |
209 |
210 | urn:mace:shibboleth:1.0:nameIdentifier
211 | urn:oasis:names:tc:SAML:2.0:nameid-format:transient
212 |
213 |
214 |
215 |
216 | TestShib Two Identity Provider
217 | TestShib Two
218 | http://www.testshib.org/testshib-two/
219 |
220 |
221 | Nate
222 | Klingenstein
223 | ndk@internet2.edu
224 |
225 |
226 |
227 |
228 |
229 |
230 |
231 |
232 |
233 |
234 |
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 |
246 |
247 |
248 |
249 |
250 |
251 |
252 |
253 |
254 |
256 |
257 |
258 |
259 |
260 |
261 |
262 | TestShib Test SP
263 | TestShib SP. Log into this to test your machine.
264 | Once logged in check that all attributes that you expected have been
265 | released.
266 | https://www.testshib.org/testshibtwo.jpg
267 |
268 |
269 |
270 |
271 |
272 |
273 |
274 | MIIEPjCCAyagAwIBAgIBADANBgkqhkiG9w0BAQUFADB3MQswCQYDVQQGEwJVUzEV
275 | MBMGA1UECBMMUGVubnN5bHZhbmlhMRMwEQYDVQQHEwpQaXR0c2J1cmdoMSIwIAYD
276 | VQQKExlUZXN0U2hpYiBTZXJ2aWNlIFByb3ZpZGVyMRgwFgYDVQQDEw9zcC50ZXN0
277 | c2hpYi5vcmcwHhcNMDYwODMwMjEyNDM5WhcNMTYwODI3MjEyNDM5WjB3MQswCQYD
278 | VQQGEwJVUzEVMBMGA1UECBMMUGVubnN5bHZhbmlhMRMwEQYDVQQHEwpQaXR0c2J1
279 | cmdoMSIwIAYDVQQKExlUZXN0U2hpYiBTZXJ2aWNlIFByb3ZpZGVyMRgwFgYDVQQD
280 | Ew9zcC50ZXN0c2hpYi5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
281 | AQDJyR6ZP6MXkQ9z6RRziT0AuCabDd3x1m7nLO9ZRPbr0v1LsU+nnC363jO8nGEq
282 | sqkgiZ/bSsO5lvjEt4ehff57ERio2Qk9cYw8XCgmYccVXKH9M+QVO1MQwErNobWb
283 | AjiVkuhWcwLWQwTDBowfKXI87SA7KR7sFUymNx5z1aoRvk3GM++tiPY6u4shy8c7
284 | vpWbVfisfTfvef/y+galxjPUQYHmegu7vCbjYP3On0V7/Ivzr+r2aPhp8egxt00Q
285 | XpilNai12LBYV3Nv/lMsUzBeB7+CdXRVjZOHGuQ8mGqEbsj8MBXvcxIKbcpeK5Zi
286 | JCVXPfarzuriM1G5y5QkKW+LAgMBAAGjgdQwgdEwHQYDVR0OBBYEFKB6wPDxwYrY
287 | StNjU5P4b4AjBVQVMIGhBgNVHSMEgZkwgZaAFKB6wPDxwYrYStNjU5P4b4AjBVQV
288 | oXukeTB3MQswCQYDVQQGEwJVUzEVMBMGA1UECBMMUGVubnN5bHZhbmlhMRMwEQYD
289 | VQQHEwpQaXR0c2J1cmdoMSIwIAYDVQQKExlUZXN0U2hpYiBTZXJ2aWNlIFByb3Zp
290 | ZGVyMRgwFgYDVQQDEw9zcC50ZXN0c2hpYi5vcmeCAQAwDAYDVR0TBAUwAwEB/zAN
291 | BgkqhkiG9w0BAQUFAAOCAQEAc06Kgt7ZP6g2TIZgMbFxg6vKwvDL0+2dzF11Onpl
292 | 5sbtkPaNIcj24lQ4vajCrrGKdzHXo9m54BzrdRJ7xDYtw0dbu37l1IZVmiZr12eE
293 | Iay/5YMU+aWP1z70h867ZQ7/7Y4HW345rdiS6EW663oH732wSYNt9kr7/0Uer3KD
294 | 9CuPuOidBacospDaFyfsaJruE99Kd6Eu/w5KLAGG+m0iqENCziDGzVA47TngKz2v
295 | PVA+aokoOyoz3b53qeti77ijatSEoKjxheBWpO+eoJeGq/e49Um3M2ogIX/JAlMa
296 | Inh+vYSYngQB2sx9LGkR9KHaMKNIGCDehk93Xla4pWJx1w==
297 |
298 |
299 |
300 |
301 |
302 |
303 |
304 |
305 |
306 |
307 |
308 |
309 |
310 |
311 |
312 |
313 |
315 |
317 |
319 |
321 |
322 |
323 |
324 | urn:oasis:names:tc:SAML:2.0:nameid-format:transient
325 | urn:mace:shibboleth:1.0:nameIdentifier
326 |
327 |
333 |
334 |
337 |
340 |
343 |
346 |
349 |
352 |
353 |
354 |
355 |
358 |
361 |
362 |
363 |
364 |
365 |
366 | TestShib Two Service Provider
367 | TestShib Two
368 | http://www.testshib.org/testshib-two/
369 |
370 |
371 | Nate
372 | Klingenstein
373 | ndk@internet2.edu
374 |
375 |
376 |
377 |
378 |
379 |
380 |
--------------------------------------------------------------------------------
/src/main/webapp/WEB-INF/web.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 | jee-pac4j-demo
7 |
8 |
9 |
10 |
11 | org.pac4j.demo.jee.MySessionListener
12 |
13 |
14 |
15 | org.springframework.web.context.ContextLoaderListener
16 |
17 |
18 | contextConfigLocation
19 | classpath:application-context.xml
20 |
21 |
22 |
23 | indexFilter
24 | org.pac4j.jee.filter.SecurityFilter
25 |
26 | clients
27 | AnonymousClient
28 |
29 |
30 |
31 | indexFilter
32 | /
33 | REQUEST
34 |
35 |
36 | indexFilter
37 | /index.jsp
38 | REQUEST
39 |
40 |
41 |
42 | mustBeAnonFilter
43 | org.pac4j.jee.filter.SecurityFilter
44 |
45 | clients
46 | AnonymousClient
47 |
48 |
49 | authorizers
50 | mustBeAnon
51 |
52 |
53 |
54 | mustBeAnonFilter
55 | /loginForm.jsp
56 | REQUEST
57 |
58 |
59 |
63 |
64 | callbackFilter
65 | org.pac4j.jee.filter.CallbackFilter
66 |
67 | defaultUrl
68 | /
69 |
70 |
71 | renewSession
72 | true
73 |
74 |
75 |
76 | callbackFilter
77 | /callback
78 | REQUEST
79 |
80 |
81 |
82 | JwtParameterFilter
83 | org.pac4j.jee.filter.SecurityFilter
84 |
85 | configFactory
86 | org.pac4j.demo.jee.DemoConfigFactory
87 |
88 |
89 | clients
90 | ParameterClient
91 |
92 |
93 |
94 | JwtParameterFilter
95 | /rest-jwt/*
96 | REQUEST
97 |
98 |
99 |
100 | DirectBasicAuthFilter
101 | org.pac4j.jee.filter.SecurityFilter
102 |
103 | clients
104 | DirectBasicAuthClient,ParameterClient
105 |
106 |
107 |
108 | DirectBasicAuthFilter
109 | /dba/*
110 | REQUEST
111 |
112 |
113 |
114 | OidcFilter
115 | org.pac4j.jee.filter.SecurityFilter
116 |
117 | clients
118 | GoogleOidcClient
119 |
120 |
121 |
122 | OidcFilter
123 | /oidc/*
124 | REQUEST
125 |
126 |
127 |
128 | ForceLoginFilter
129 | org.pac4j.demo.jee.ForceLoginFilter
130 |
131 |
132 | ForceLoginFilter
133 | /forceLogin
134 | REQUEST
135 |
136 |
137 |
138 | Saml2Filter
139 | org.pac4j.jee.filter.SecurityFilter
140 |
141 | clients
142 | SAML2Client
143 |
144 |
145 |
146 | Saml2Filter
147 | /saml2/*
148 | REQUEST
149 |
150 |
151 | Saml2MetadataFilter
152 | org.pac4j.jee.saml.metadata.Saml2MetadataFilter
153 |
154 | clientName
155 | SAML2Client
156 |
157 |
158 |
159 | Saml2MetadataFilter
160 | /saml2-metadata
161 | REQUEST
162 |
163 |
164 |
165 | FacebookFilter
166 | org.pac4j.jee.filter.SecurityFilter
167 |
168 | clients
169 | FacebookClient
170 |
171 |
172 | matchers
173 | excludedPath
174 |
175 |
176 |
177 | FacebookFilter
178 | /facebook/*
179 | REQUEST
180 |
181 |
182 |
183 | PostFilter
184 | org.pac4j.jee.filter.SecurityFilter
185 |
186 | clients
187 | FormClient
188 |
189 |
190 |
191 | PostFilter
192 | /post/*
193 | REQUEST
194 |
195 |
196 |
197 | ProtectedFilter
198 | org.pac4j.jee.filter.SecurityFilter
199 |
200 |
201 | ProtectedFilter
202 | /protected/*
203 | REQUEST
204 |
205 |
206 |
207 | FacebookAdminFilter
208 | org.pac4j.jee.filter.SecurityFilter
209 |
210 | clients
211 | FacebookClient
212 |
213 |
214 | authorizers
215 | admin
216 |
217 |
218 |
219 | FacebookAdminFilter
220 | /facebookadmin/*
221 | REQUEST
222 |
223 |
224 |
228 |
229 | facebookCustomFilter
230 | org.pac4j.jee.filter.SecurityFilter
231 |
232 | clients
233 | FacebookClient
234 |
235 |
236 | authorizers
237 | custom
238 |
239 |
240 |
241 | facebookCustomFilter
242 | /facebookcustom/*
243 | REQUEST
244 |
245 |
246 |
247 | TwitterFilter
248 | org.pac4j.jee.filter.SecurityFilter
249 |
250 | clients
251 | TwitterClient,FacebookClient
252 |
253 |
254 |
255 | TwitterFilter
256 | /twitter/*
257 | REQUEST
258 |
259 |
260 |
261 | FormFilter
262 | org.pac4j.jee.filter.SecurityFilter
263 |
264 | clients
265 | FormClient
266 |
267 |
268 |
269 | FormFilter
270 | /form/*
271 | REQUEST
272 |
273 |
274 |
275 | IndirectBasicAuthFilter
276 | org.pac4j.jee.filter.SecurityFilter
277 |
278 | clients
279 | IndirectBasicAuthClient
280 |
281 |
282 |
283 | IndirectBasicAuthFilter
284 | /basicauth/*
285 | REQUEST
286 |
287 |
288 |
289 | CasFilter
290 | org.pac4j.jee.filter.SecurityFilter
291 |
292 | clients
293 | CasClient
294 |
295 |
296 |
297 | CasFilter
298 | /cas/*
299 | REQUEST
300 |
301 |
302 |
303 | StravaFilter
304 | org.pac4j.jee.filter.SecurityFilter
305 |
306 | clients
307 | StravaClient
308 |
309 |
310 |
311 | StravaFilter
312 | /strava/*
313 | REQUEST
314 |
315 |
316 |
317 | mustBeAuthFilter
318 | org.pac4j.jee.filter.SecurityFilter
319 |
320 | clients
321 | AnonymousClient
322 |
323 |
324 | authorizers
325 | mustBeAuth
326 |
327 |
328 |
329 | mustBeAuthFilter
330 | /logout
331 | REQUEST
332 |
333 |
334 |
335 | logoutFilter
336 | org.pac4j.jee.filter.LogoutFilter
337 |
338 | defaultUrl
339 | /?defaulturlafterlogout
340 |
341 |
342 | destroySession
343 | true
344 |
345 |
346 |
347 | logoutFilter
348 | /logout
349 | REQUEST
350 |
351 |
352 |
353 | centralLogoutFilter
354 | org.pac4j.jee.filter.LogoutFilter
355 |
356 | defaultUrl
357 | http://localhost:8080/?defaulturlafterlogoutafteridp
358 |
359 |
360 | localLogout
361 | false
362 |
363 |
364 | centralLogout
365 | true
366 |
367 |
368 | logoutUrlPattern
369 | http://localhost:8080/.*
370 |
371 |
372 |
373 | centralLogoutFilter
374 | /centralLogout
375 | REQUEST
376 |
377 |
378 |
379 | 401
380 | /error401.jsp
381 |
382 |
383 |
384 | 403
385 | /error403.jsp
386 |
387 |
388 |
389 | 500
390 | /error500.jsp
391 |
392 |
393 |
394 | java.lang.Exception
395 | /error500.jsp
396 |
397 |
398 |
399 |
--------------------------------------------------------------------------------
/src/main/webapp/basicauth/index.jsp:
--------------------------------------------------------------------------------
1 | <%@page session="false" %>
2 | <%@page import="org.pac4j.core.profile.ProfileManager"%>
3 | <%@ page import="org.pac4j.jee.context.JEEContext" %>
4 | <%@ page import="org.pac4j.jee.context.session.JEESessionStore" %>
5 | protected area
6 | Back
7 |
8 | <%
9 | JEEContext context = new JEEContext(request, response);
10 | ProfileManager manager = new ProfileManager(context, new JEESessionStore());
11 | %>
12 | profiles: <%=manager.getProfiles()%>
13 |
--------------------------------------------------------------------------------
/src/main/webapp/cas/index.jsp:
--------------------------------------------------------------------------------
1 | <%@page session="false" %>
2 | <%@page import="org.pac4j.core.profile.ProfileManager"%>
3 | <%@ page import="org.pac4j.jee.context.JEEContext" %>
4 | <%@ page import="java.util.Optional" %>
5 | <%@ page import="org.pac4j.cas.profile.CasProxyProfile" %>
6 | <%@ page import="org.pac4j.core.profile.UserProfile" %>
7 | <%@ page import="org.pac4j.jee.context.session.JEESessionStore" %>
8 | protected area
9 | Back
10 |
11 | <%
12 | JEEContext context = new JEEContext(request, response);
13 | ProfileManager manager = new ProfileManager(context, new JEESessionStore());
14 | Optional optProfile = manager.getProfile();
15 | String pt = null;
16 | if (optProfile.isPresent()) {
17 | UserProfile profile = optProfile.get();
18 | if (profile instanceof CasProxyProfile) {
19 | CasProxyProfile casProxyProfile = (CasProxyProfile) profile;
20 | pt = casProxyProfile.getProxyTicketFor("http://test");
21 | }
22 | }
23 | %>
24 | profiles: <%=manager.getProfiles()%>
25 | proxy ticket: <%=pt%>
26 |
--------------------------------------------------------------------------------
/src/main/webapp/dba/index.jsp:
--------------------------------------------------------------------------------
1 | <%@page session="false" %>
2 | <%@page import="org.pac4j.core.profile.ProfileManager"%>
3 | <%@ page import="org.pac4j.jee.context.JEEContext" %>
4 | <%@ page import="org.pac4j.jee.context.session.JEESessionStore" %>
5 | protected area
6 | Back
7 |
8 | <%
9 | JEEContext context = new JEEContext(request, response);
10 | ProfileManager manager = new ProfileManager(context, new JEESessionStore());
11 | %>
12 | profiles: <%=manager.getProfiles()%>
13 |
--------------------------------------------------------------------------------
/src/main/webapp/error401.jsp:
--------------------------------------------------------------------------------
1 | <%@page session="false" %>
2 |
3 |
4 | unauthorized
5 |
6 | Home
7 |
8 |
9 |
--------------------------------------------------------------------------------
/src/main/webapp/error403.jsp:
--------------------------------------------------------------------------------
1 | <%@page session="false" %>
2 |
3 |
4 | forbidden
5 |
6 | Home
7 |
8 |
9 |
--------------------------------------------------------------------------------
/src/main/webapp/error500.jsp:
--------------------------------------------------------------------------------
1 | <%@page session="false" %>
2 |
3 |
4 | internal error
5 |
6 | Home
7 |
8 |
9 |
--------------------------------------------------------------------------------
/src/main/webapp/facebook/index.jsp:
--------------------------------------------------------------------------------
1 | <%@page session="false" %>
2 | <%@page import="org.pac4j.core.profile.ProfileManager"%>
3 | <%@ page import="org.pac4j.jee.context.JEEContext" %>
4 | <%@ page import="org.pac4j.jee.context.session.JEESessionStore" %>
5 | protected area
6 | Back
7 |
8 | <%
9 | JEEContext context = new JEEContext(request, response);
10 | ProfileManager manager = new ProfileManager(context, new JEESessionStore());
11 | %>
12 | profiles: <%=manager.getProfiles()%>
13 |
--------------------------------------------------------------------------------
/src/main/webapp/facebook/notprotected.jsp:
--------------------------------------------------------------------------------
1 | <%@page session="false" %>
2 | <%@page import="org.pac4j.core.profile.ProfileManager"%>
3 | <%@ page import="org.pac4j.jee.context.JEEContext" %>
4 | <%@ page import="org.pac4j.jee.context.session.JEESessionStore" %>
5 | Not protected page
6 | Back
7 |
8 | <%
9 | JEEContext context = new JEEContext(request, response);
10 | ProfileManager manager = new ProfileManager(context, new JEESessionStore());
11 | %>
12 | profiles: <%=manager.getProfiles()%>
13 |
--------------------------------------------------------------------------------
/src/main/webapp/facebookadmin/index.jsp:
--------------------------------------------------------------------------------
1 | <%@page session="false" %>
2 | <%@page import="org.pac4j.core.profile.ProfileManager"%>
3 | <%@ page import="org.pac4j.jee.context.JEEContext" %>
4 | <%@ page import="org.pac4j.jee.context.session.JEESessionStore" %>
5 | protected area
6 | Back
7 |
8 | <%
9 | JEEContext context = new JEEContext(request, response);
10 | ProfileManager manager = new ProfileManager(context, new JEESessionStore());
11 | %>
12 | profiles: <%=manager.getProfiles()%>
13 |
--------------------------------------------------------------------------------
/src/main/webapp/facebookcustom/index.jsp:
--------------------------------------------------------------------------------
1 | <%@page session="false" %>
2 | <%@page import="org.pac4j.core.profile.ProfileManager"%>
3 | <%@ page import="org.pac4j.jee.context.JEEContext" %>
4 | <%@ page import="org.pac4j.jee.context.session.JEESessionStore" %>
5 | protected area
6 | Back
7 |
8 | <%
9 | JEEContext context = new JEEContext(request, response);
10 | ProfileManager manager = new ProfileManager(context, new JEESessionStore());
11 | %>
12 | profiles: <%=manager.getProfiles()%>
13 |
--------------------------------------------------------------------------------
/src/main/webapp/form/index.jsp:
--------------------------------------------------------------------------------
1 | <%@page session="false" %>
2 | <%@page import="org.pac4j.core.profile.ProfileManager"%>
3 | <%@ page import="org.pac4j.jee.context.JEEContext" %>
4 | <%@ page import="org.pac4j.jee.context.session.JEESessionStore" %>
5 | protected area
6 | Back
7 |
8 | <%
9 | JEEContext context = new JEEContext(request, response);
10 | ProfileManager manager = new ProfileManager(context, new JEESessionStore());
11 | %>
12 | profiles: <%=manager.getProfiles()%>
13 |
--------------------------------------------------------------------------------
/src/main/webapp/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/src/main/webapp/index.jsp:
--------------------------------------------------------------------------------
1 | <%@page session="false" %>
2 | <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
3 | <%@ page import="org.pac4j.jee.context.JEEContext" %>
4 | <%@ page import="org.pac4j.core.profile.ProfileManager" %>
5 | <%@ page import="org.pac4j.core.util.Pac4jConstants" %>
6 | <%@ page import="org.pac4j.jee.context.session.JEESessionStore" %>
7 | <%
8 | JEEContext context = new JEEContext(request, response);
9 | ProfileManager manager = new ProfileManager(context, new JEESessionStore());
10 | String sessionId = null;
11 | HttpSession httpSession = request.getSession(false);
12 | if (httpSession != null) {
13 | sessionId = httpSession.getId();
14 | }
15 | %>
16 | index
17 | Protected url by Facebook: facebook/index.jsp (use a real account)
18 | Not protected page: facebook/notprotected.jsp (no authentication required)
19 | Protected url by Facebook with ROLE_ADMIN: facebookadmin/index.jsp (use a real account)
20 | Protected url by Facebook with custom authorizer (= must be a CommonProfile where the username starts with "jle"): facebookcustom/index.jsp (login with form or basic authentication before with jle* username)
21 | Protected url by Twitter: twitter/index.jsp or by Facebook: twitter/index.jsp?force_client=FacebookClient (use a real account)
22 | Protected url by form authentication: form/index.jsp (use login = pwd)
23 | Protected url by indirect basic auth: basicauth/index.jsp (use login = pwd)
24 | Protected url by CAS: cas/index.jsp (use login = pwd)
25 | Protected url by SAML2: saml2/index.jsp (use one of test accounts listed on IDP)
26 | Protected url by Google OpenID Connect: oidc/index.jsp (use a real account)
27 | Protected url by Strava: strava/index.jsp (use a real account)
28 | Protected url: protected/index.jsp (won't start any login process)
29 |
30 | Generate a JWT token (after being authenticated)
31 | Protected url by DirectBasicAuthClient: /dba/index.jsp (POST the Authorization header with value: Basic amxlbGV1OmpsZWxldQ==) then by ParameterClient: /dba/index.jsp (with request parameter: token=jwt_generated_token)
32 | Protected url by ParameterClient: /rest-jwt/index.jsp (with request parameter: token=jwt_generated_token)
33 |
34 | Force Facebook login (even if already authenticated)
35 |
36 |
41 | ">local logout
42 |
43 | ">central logout
44 |
45 | profiles: <%=manager.getProfiles()%>
46 |
47 | sessionId: <%=sessionId%>
48 |
--------------------------------------------------------------------------------
/src/main/webapp/jwt.jsp:
--------------------------------------------------------------------------------
1 | <%@page session="false" %>
2 | <%@page import="org.pac4j.core.profile.ProfileManager"%>
3 | <%@ page import="org.pac4j.jee.context.JEEContext" %>
4 | <%@ page import="org.pac4j.jwt.profile.JwtGenerator" %>
5 | <%@ page import="org.pac4j.demo.jee.Constants" %>
6 | <%@ page import="java.util.Optional" %>
7 | <%@ page import="org.pac4j.jwt.config.signature.SecretSignatureConfiguration" %>
8 | <%@ page import="org.pac4j.core.profile.UserProfile" %>
9 | <%@ page import="org.pac4j.jee.context.session.JEESessionStore" %>
10 | Generate JWT token
11 | Back
12 |
13 | <%
14 | JEEContext context = new JEEContext(request, response);
15 | ProfileManager manager = new ProfileManager(context, new JEESessionStore());
16 | Optional profile = manager.getProfile();
17 | JwtGenerator generator = new JwtGenerator(new SecretSignatureConfiguration(Constants.JWT_SALT));
18 | String token = "";
19 | if (profile.isPresent()) {
20 | token = generator.generate(profile.get());
21 | }
22 | %>
23 | token: <%=token%>
24 |
--------------------------------------------------------------------------------
/src/main/webapp/loginForm.jsp:
--------------------------------------------------------------------------------
1 | <%@page session="false" %>
2 | <%@page import="org.pac4j.core.config.*"%>
3 | <%@ page import="org.pac4j.http.client.indirect.FormClient" %>
4 | <%@ page import="org.pac4j.demo.jee.DemoConfigFactory" %>
5 | <%
6 | FormClient formClient = (FormClient) DemoConfigFactory.CONFIG_INSTANCE.getClients().findClient("FormClient").get();
7 | %>
8 |
15 |
--------------------------------------------------------------------------------
/src/main/webapp/oidc/index.jsp:
--------------------------------------------------------------------------------
1 | <%@page session="false" %>
2 | <%@page import="org.pac4j.core.profile.ProfileManager"%>
3 | <%@ page import="org.pac4j.jee.context.JEEContext" %>
4 | <%@ page import="org.pac4j.jee.context.session.JEESessionStore" %>
5 | protected area
6 | Back
7 |
8 | <%
9 | JEEContext context = new JEEContext(request, response);
10 | ProfileManager manager = new ProfileManager(context, new JEESessionStore());
11 | %>
12 | profiles: <%=manager.getProfiles()%>
13 |
--------------------------------------------------------------------------------
/src/main/webapp/post/index.jsp:
--------------------------------------------------------------------------------
1 | <%@page session="false" %>
2 | <%@page import="org.pac4j.core.profile.ProfileManager"%>
3 | <%@ page import="org.pac4j.jee.context.JEEContext" %>
4 | <%@ page import="org.pac4j.jee.context.session.JEESessionStore" %>
5 | protected area
6 | Back
7 |
8 | <%
9 | JEEContext context = new JEEContext(request, response);
10 | ProfileManager manager = new ProfileManager(context, new JEESessionStore());
11 | %>
12 | profiles: <%=manager.getProfiles()%>
13 |
14 | data1: <%=request.getParameter("data1")%>
15 | data2: <%=request.getParameter("data2")%>
16 |
--------------------------------------------------------------------------------
/src/main/webapp/protected/index.jsp:
--------------------------------------------------------------------------------
1 | <%@page session="false" %>
2 | <%@page import="org.pac4j.core.profile.ProfileManager"%>
3 | <%@ page import="org.pac4j.jee.context.JEEContext" %>
4 | <%@ page import="org.pac4j.jee.context.session.JEESessionStore" %>
5 | protected area
6 | Back
7 |
8 | <%
9 | JEEContext context = new JEEContext(request, response);
10 | ProfileManager manager = new ProfileManager(context, new JEESessionStore());
11 | %>
12 | profiles: <%=manager.getProfiles()%>
13 |
--------------------------------------------------------------------------------
/src/main/webapp/rest-jwt/index.jsp:
--------------------------------------------------------------------------------
1 | <%@page session="false" %>
2 | <%@page import="org.pac4j.core.profile.ProfileManager"%>
3 | <%@ page import="org.pac4j.jee.context.JEEContext" %>
4 | <%@ page import="org.pac4j.jee.context.session.JEESessionStore" %>
5 | protected area
6 | Back
7 |
8 | <%
9 | JEEContext context = new JEEContext(request, response);
10 | ProfileManager manager = new ProfileManager(context, new JEESessionStore());
11 | %>
12 | profiles: <%=manager.getProfiles()%>
13 |
--------------------------------------------------------------------------------
/src/main/webapp/saml2/index.jsp:
--------------------------------------------------------------------------------
1 | <%@page session="false" %>
2 | <%@page import="org.pac4j.core.profile.ProfileManager"%>
3 | <%@ page import="org.pac4j.jee.context.JEEContext" %>
4 | <%@ page import="org.pac4j.jee.context.session.JEESessionStore" %>
5 | protected area
6 | Back
7 |
8 | <%
9 | JEEContext context = new JEEContext(request, response);
10 | ProfileManager manager = new ProfileManager(context, new JEESessionStore());
11 | %>
12 | profiles: <%=manager.getProfiles()%>
13 |
--------------------------------------------------------------------------------
/src/main/webapp/strava/index.jsp:
--------------------------------------------------------------------------------
1 | <%@page session="false" %>
2 | <%@page import="org.pac4j.core.profile.ProfileManager"%>
3 | <%@ page import="org.pac4j.jee.context.JEEContext" %>
4 | <%@ page import="org.pac4j.jee.context.session.JEESessionStore" %>
5 | protected area
6 | Back
7 |
8 | <%
9 | JEEContext context = new JEEContext(request, response);
10 | ProfileManager manager = new ProfileManager(context, new JEESessionStore());
11 | %>
12 | profiles: <%=manager.getProfiles()%>
13 |
--------------------------------------------------------------------------------
/src/main/webapp/twitter/index.jsp:
--------------------------------------------------------------------------------
1 | <%@page session="false" %>
2 | <%@page import="org.pac4j.core.profile.ProfileManager"%>
3 | <%@ page import="org.pac4j.jee.context.JEEContext" %>
4 | <%@ page import="org.pac4j.jee.context.session.JEESessionStore" %>
5 | protected area
6 | Back
7 |
8 | <%
9 | JEEContext context = new JEEContext(request, response);
10 | ProfileManager manager = new ProfileManager(context, new JEESessionStore());
11 | %>
12 | profiles: <%=manager.getProfiles()%>
13 |
--------------------------------------------------------------------------------