diff --git a/uw-spring-security-config/src/main/java/edu/wisc/uwss/configuration/HttpSecurityAmender.java b/uw-spring-security-config/src/main/java/edu/wisc/uwss/configuration/HttpSecurityAmender.java index 6f89a949f59e820533a01b209de9e003283307dd..4ca350f213b735a092e17114b761526e6fa26bef 100644 --- a/uw-spring-security-config/src/main/java/edu/wisc/uwss/configuration/HttpSecurityAmender.java +++ b/uw-spring-security-config/src/main/java/edu/wisc/uwss/configuration/HttpSecurityAmender.java @@ -10,15 +10,21 @@ import org.springframework.security.config.annotation.web.configuration.WebSecur * Callback interface provided to allow downstream projects to inject changes to the {@link HttpSecurity} * provided by {@link WebSecurityConfigurerAdapter} AT THE RIGHT TIME, before it is closed off to change. * - * Both *WebSecurityConfiguration classes in the local and preauth packages depend on this interface and - * call it at the end of {@link WebSecurityConfigurerAdapter#configure(HttpSecurity)}. + * {@link UWSpringSecurityWebConfigurerAdapter} depends on this interface and + * will invoke all implementing instances it at the end of {@link WebSecurityConfigurerAdapter#configure(HttpSecurity)}. * * @author Nicholas Blair */ public interface HttpSecurityAmender { /** - * Amend the {@link HttpSecurity} how you see fit. + * Amend the {@link HttpSecurity} how you see fit. Typically used when NOT using {@link EverythingRequiresAuthenticationConfiguration}. + * + * Some use cases: + * <ul> + * <li>Specifying authentication or authorization rules for specific URLs within your application.</li> + * <li>Internally by local-users and preauth to inject the appropriate spring security services.</li> + * </ul> * * @param httpSecurity * @throws Exception diff --git a/uw-spring-security-config/src/main/java/edu/wisc/uwss/configuration/UWSpringSecurityConfiguration.java b/uw-spring-security-config/src/main/java/edu/wisc/uwss/configuration/UWSpringSecurityConfiguration.java index 6a1898e2d4922d09d8b036ad512d9b6c3a6f2eae..39b114212c7ea318ba9f741879d363a7193e4758 100644 --- a/uw-spring-security-config/src/main/java/edu/wisc/uwss/configuration/UWSpringSecurityConfiguration.java +++ b/uw-spring-security-config/src/main/java/edu/wisc/uwss/configuration/UWSpringSecurityConfiguration.java @@ -3,8 +3,10 @@ */ package edu.wisc.uwss.configuration; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; /** * Root {@link Configuration} class that consuming applications should reference in their ApplicationInitizalizers. @@ -18,6 +20,7 @@ import org.springframework.context.annotation.Configuration; @ComponentScan(basePackages={ "edu.wisc.uwss.configuration.local", "edu.wisc.uwss.configuration.preauth" }) +@Import(UWSpringSecurityWebConfigurerAdapter.class) public class UWSpringSecurityConfiguration { } diff --git a/uw-spring-security-config/src/main/java/edu/wisc/uwss/configuration/UWSpringSecurityWebConfigurerAdapter.java b/uw-spring-security-config/src/main/java/edu/wisc/uwss/configuration/UWSpringSecurityWebConfigurerAdapter.java new file mode 100644 index 0000000000000000000000000000000000000000..2e6c00d58cdbdc74faa1aea1c243836975291de7 --- /dev/null +++ b/uw-spring-security-config/src/main/java/edu/wisc/uwss/configuration/UWSpringSecurityWebConfigurerAdapter.java @@ -0,0 +1,41 @@ +package edu.wisc.uwss.configuration; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; + +import java.util.ArrayList; +import java.util.List; + +/** + * There can be only one {@link WebSecurityConfigurerAdapter}. + * + * @author Nicholas Blair + */ +@Configuration +@EnableWebSecurity +public class UWSpringSecurityWebConfigurerAdapter extends WebSecurityConfigurerAdapter { + + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + @Autowired(required=false) + List<HttpSecurityAmender> amenders = new ArrayList<>(); + + /** + * {@inheritDoc} + * + * Fires {@link HttpSecurityAmender#amend(HttpSecurity)} on all instances registered in the + * ApplicationContext. + */ + @Override + protected void configure(HttpSecurity http) throws Exception { + logger.debug("configuring {} HttpSecurityAmenders", amenders.size()); + for(HttpSecurityAmender amender: amenders) { + amender.amend(http); + logger.debug("configured HttpSecurityAmender {}", amender.toString()); + } + } +} diff --git a/uw-spring-security-config/src/main/java/edu/wisc/uwss/configuration/development/SimulatePreAuthenticationHttpSecurityAmender.java b/uw-spring-security-config/src/main/java/edu/wisc/uwss/configuration/development/SimulatePreAuthenticationHttpSecurityAmender.java new file mode 100644 index 0000000000000000000000000000000000000000..903d6079ee57d9c87a6b28c3f98dd84d80374dd0 --- /dev/null +++ b/uw-spring-security-config/src/main/java/edu/wisc/uwss/configuration/development/SimulatePreAuthenticationHttpSecurityAmender.java @@ -0,0 +1,45 @@ +package edu.wisc.uwss.configuration.development; + +import com.github.nblair.web.PreAuthenticationSimulationServletFilter; + + +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.web.context.SecurityContextPersistenceFilter; + +import javax.servlet.Filter; + +import edu.wisc.uwss.configuration.HttpSecurityAmender; + +/** + * {@link HttpSecurityAmender} useful for development environments. + * + * @see PreAuthenticationSimulationServletFilter + * @author Nicholas Blair + */ +public class SimulatePreAuthenticationHttpSecurityAmender implements HttpSecurityAmender{ + + private final Filter preAuthenticationSimulationServletFilter; + + /** + * @param preAuthenticationSimulationServletFilter + */ + public SimulatePreAuthenticationHttpSecurityAmender(Filter preAuthenticationSimulationServletFilter) { + this.preAuthenticationSimulationServletFilter = preAuthenticationSimulationServletFilter; + } + + /** + * {@inheritDoc} + * + * Injects the {@link PreAuthenticationSimulationServletFilter} into the filterchain in the + * correct spot, so that the HttpServletRequest attributes it provides are available when the + * preauthentication filter tries to read them. + * + * @param http + * @throws Exception + */ + @Override + public void amend(HttpSecurity http) throws Exception { + http.addFilterBefore(preAuthenticationSimulationServletFilter, SecurityContextPersistenceFilter.class); + } + +} diff --git a/uw-spring-security-config/src/main/java/edu/wisc/uwss/configuration/local/LocalUsersWebSecurityConfiguration.java b/uw-spring-security-config/src/main/java/edu/wisc/uwss/configuration/local/LocalUsersWebSecurityConfiguration.java index 14f8b3e4e50c090e9f4a23337c645647437eb7e2..cb93405f33d44e3830bffd66bb4cd295e9fa5030 100644 --- a/uw-spring-security-config/src/main/java/edu/wisc/uwss/configuration/local/LocalUsersWebSecurityConfiguration.java +++ b/uw-spring-security-config/src/main/java/edu/wisc/uwss/configuration/local/LocalUsersWebSecurityConfiguration.java @@ -13,7 +13,6 @@ import org.springframework.core.annotation.Order; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.core.userdetails.UserDetailsService; import edu.wisc.uwss.configuration.HttpSecurityAmender; @@ -28,35 +27,33 @@ import edu.wisc.uwss.configuration.combined.CombinedAuthentication; @EnableWebSecurity @Profile("local-users") @Order(CombinedAuthentication.LOCAL_USERS_WEB_SECURITY_CONFIGURATION_ORDER) -public class LocalUsersWebSecurityConfiguration extends WebSecurityConfigurerAdapter { +public class LocalUsersWebSecurityConfiguration { protected final Logger logger = LoggerFactory.getLogger(this.getClass()); - - @Autowired(required=false) - private HttpSecurityAmender amender = new HttpSecurityAmender.Default(); + /** - * {@inheritDoc} - * - * Enables {@link HttpSecurity#formLogin()} and {@link HttpSecurity#httpBasic()} for demo users. + * + * @return an {@link HttpSecurityAmender} that sets up formLogin and HTTP Basic */ - @Override - protected void configure(HttpSecurity http) throws Exception { - logger.debug("enter WebSecurityConfigurerAdapter#configure for local-users"); - http - .formLogin() - .and() - .httpBasic() - .and() - .logout() - .invalidateHttpSession(true); - - // CSRF protection is disabled, as without it /logout requires POST - http - .csrf().disable(); - - amender.amend(http); - } + @Bean + public HttpSecurityAmender localUsersHttpSecurityAmender() { + return new HttpSecurityAmender() { + @Override + public void amend(HttpSecurity http) throws Exception { + http + .formLogin() + .and() + .httpBasic() + .and() + .logout() + .invalidateHttpSession(true); + // CSRF protection is disabled, as without it /logout requires POST + http + .csrf().disable(); + } + }; + } /** * {@inheritDoc} * @@ -71,14 +68,4 @@ public class LocalUsersWebSecurityConfiguration extends WebSecurityConfigurerAda auth.userDetailsService(userDetailsService); } - /** - * Exposes the internal {@link HttpSecurity} as a bean so deployers can customize it further. - * - * @return - * @throws Exception - */ - @Bean - public HttpSecurity httpSecurity() throws Exception { - return getHttp(); - } } diff --git a/uw-spring-security-config/src/main/java/edu/wisc/uwss/configuration/preauth/PreAuthenticationDevelopmentConfiguration.java b/uw-spring-security-config/src/main/java/edu/wisc/uwss/configuration/preauth/PreAuthenticationDevelopmentConfiguration.java index b654127a290024b5b29e68a9cc26c9d691953486..3a42cdc49cbf77e2f311f6613325fe74ff8d9a0d 100644 --- a/uw-spring-security-config/src/main/java/edu/wisc/uwss/configuration/preauth/PreAuthenticationDevelopmentConfiguration.java +++ b/uw-spring-security-config/src/main/java/edu/wisc/uwss/configuration/preauth/PreAuthenticationDevelopmentConfiguration.java @@ -20,6 +20,9 @@ import org.springframework.security.web.context.SecurityContextPersistenceFilter import com.github.nblair.web.PreAuthenticationSimulationServletFilter; import com.github.nblair.web.ProfileConditionalDelegatingFilterProxy; +import edu.wisc.uwss.configuration.HttpSecurityAmender; +import edu.wisc.uwss.configuration.development.SimulatePreAuthenticationHttpSecurityAmender; + /** * Isolate PreAuthenticationServletFilter configuration. * @@ -36,15 +39,12 @@ public class PreAuthenticationDevelopmentConfiguration { @Inject Environment environment; /** - * @see HttpSecurity#authorizeRequests() - * @param http * @throws Exception */ - @Autowired - public void amendHttpSecurity(HttpSecurity http) throws Exception { + @Bean + public HttpSecurityAmender httpSecurityAmender() throws Exception { logger.warn("'preauth-dev' profile activated, setting up PreAuthenticationSimulationServletFilter. Confirm this not a production environment!"); - http - .addFilterBefore(preAuthenticationSimulationFilter(), SecurityContextPersistenceFilter.class); + return new SimulatePreAuthenticationHttpSecurityAmender(preAuthenticationSimulationFilter()); } /** diff --git a/uw-spring-security-config/src/main/java/edu/wisc/uwss/configuration/preauth/PreAuthenticationHttpSecurityAmender.java b/uw-spring-security-config/src/main/java/edu/wisc/uwss/configuration/preauth/PreAuthenticationHttpSecurityAmender.java new file mode 100644 index 0000000000000000000000000000000000000000..9bf6adc826c390d9d05e048ade63d21bd006e96b --- /dev/null +++ b/uw-spring-security-config/src/main/java/edu/wisc/uwss/configuration/preauth/PreAuthenticationHttpSecurityAmender.java @@ -0,0 +1,43 @@ +package edu.wisc.uwss.configuration.preauth; + +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.web.authentication.preauth.AbstractPreAuthenticatedProcessingFilter; + +import edu.wisc.uwss.configuration.HttpSecurityAmender; +import edu.wisc.uwss.preauth.PreAuthLogoutSuccessHandler; +import edu.wisc.uwss.preauth.UWUserDetailsAuthenticationFilter; + +/** + * {@link HttpSecurityAmender} intended to inject the appropriate filter and handler to + * support "preauthentication". This is typically used at UW to support NetID Login (SAML2 over Shibboleth). + * + * @author Nicholas Blair + */ +public class PreAuthenticationHttpSecurityAmender implements HttpSecurityAmender { + private final UWUserDetailsAuthenticationFilter authenticationFilter; + public PreAuthenticationHttpSecurityAmender(UWUserDetailsAuthenticationFilter authenticationFilter) { + this.authenticationFilter = authenticationFilter; + } + /** + * {@inheritDoc} + * + * <ul> + * <li>Adds {@link UWUserDetailsAuthenticationFilter} to the chain.</li> + * <li>Wires in {@link PreAuthLogoutSuccessHandler} to logout.</li> + * <li>Disables CSRF.</li> + * </ul> + */ + @Override + public void amend(HttpSecurity http) throws Exception { + http + .addFilterBefore(authenticationFilter, AbstractPreAuthenticatedProcessingFilter.class) + .logout() + .logoutSuccessHandler(new PreAuthLogoutSuccessHandler()) + .deleteCookies("JSESSIONID") + .invalidateHttpSession(true); + + // CSRF protection is disabled, as without it /logout requires POST + http + .csrf().disable(); + } +} diff --git a/uw-spring-security-config/src/main/java/edu/wisc/uwss/configuration/preauth/PreAuthenticationWebSecurityConfiguration.java b/uw-spring-security-config/src/main/java/edu/wisc/uwss/configuration/preauth/PreAuthenticationWebSecurityConfiguration.java index 6d0eaebb5e6d64fca3a23be6583b80b061b23dcd..1bc2ea3dc73d1946107afd7f6ba8aa675b08ecb3 100644 --- a/uw-spring-security-config/src/main/java/edu/wisc/uwss/configuration/preauth/PreAuthenticationWebSecurityConfiguration.java +++ b/uw-spring-security-config/src/main/java/edu/wisc/uwss/configuration/preauth/PreAuthenticationWebSecurityConfiguration.java @@ -12,6 +12,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; import org.springframework.core.annotation.Order; +import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.AuthenticationProvider; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.web.builders.HttpSecurity; @@ -34,51 +35,27 @@ import edu.wisc.uwss.preauth.UWUserDetailsAuthenticationFilter; * @author Nicholas Blair */ @Configuration -@EnableWebSecurity @Profile("preauth") @Order(CombinedAuthentication.PREAUTH_WEB_SECURITY_CONFIGURATION_ORDER) -public class PreAuthenticationWebSecurityConfiguration extends WebSecurityConfigurerAdapter { +public class PreAuthenticationWebSecurityConfiguration { protected final Logger logger = LoggerFactory.getLogger(this.getClass()); - - @Autowired(required=false) - private HttpSecurityAmender amender = new HttpSecurityAmender.Default(); - /** - /** - * {@inheritDoc} - * - * <ul> - * <li>Adds {@link UWUserDetailsAuthenticationFilter} to the chain, see {@link #authenticationFilter()}.</li> - * <li>Enables {@link HttpSecurity#formLogin()} and {@link HttpSecurity#httpBasic()} for demo users.</li> - * <li>Wires in {@link PreAuthLogoutSuccessHandler} to logout.</li> - * </ul> - */ - @Override - protected void configure(HttpSecurity http) throws Exception { - logger.debug("enter WebSecurityConfigurerAdapter#configure for preauth"); - http - .addFilterBefore(authenticationFilter(), AbstractPreAuthenticatedProcessingFilter.class) - .logout() - .logoutSuccessHandler(new PreAuthLogoutSuccessHandler()) - .deleteCookies("JSESSIONID") - .invalidateHttpSession(true); - - // CSRF protection is disabled, as without it /logout requires POST - http - .csrf().disable(); - - amender.amend(http); - } + @Autowired + private AuthenticationManager authenticationManager; + + @Bean + public HttpSecurityAmender preAuthenticationHttpSecurityAmender() { + return new PreAuthenticationHttpSecurityAmender(authenticationFilter()); + } /** * * @return an instance of {@link UWUserDetailsAuthenticationFilter} - * @throws Exception */ @Bean - public Filter authenticationFilter() throws Exception { + public UWUserDetailsAuthenticationFilter authenticationFilter() { UWUserDetailsAuthenticationFilter filter = new UWUserDetailsAuthenticationFilter(); - filter.setAuthenticationManager(authenticationManager()); + filter.setAuthenticationManager(authenticationManager); return filter; } @@ -95,14 +72,5 @@ public class PreAuthenticationWebSecurityConfiguration extends WebSecurityConfig logger.debug("enter WebSecurityConfigurerAdapter#configureGlobal for preauth, injecting {} into AuthenticationManagerBuilder", authenticationProvider); auth.authenticationProvider(authenticationProvider); } - /** - * Exposes the internal {@link HttpSecurity} as a bean so deployers can customize it further. - * - * @return - * @throws Exception - */ - @Bean - public HttpSecurity httpSecurity() throws Exception { - return getHttp(); - } + } diff --git a/uw-spring-security-sample-war/pom.xml b/uw-spring-security-sample-war/pom.xml index 17656dd9e26c9dd3872657bcaffb7d21f6759b3b..8b6e6f1bf355553570b373e15cc733db15e667b7 100644 --- a/uw-spring-security-sample-war/pom.xml +++ b/uw-spring-security-sample-war/pom.xml @@ -109,5 +109,11 @@ <activeProfiles>local-users,preauth</activeProfiles> </properties> </profile> + <profile> + <id>combined-simulate-netid</id> + <properties> + <activeProfiles>local-users,preauth,preauth-simulate-netid</activeProfiles> + </properties> + </profile> </profiles> </project> \ No newline at end of file diff --git a/uw-spring-security-sample-war/src/main/java/edu/wisc/uwss/sample/configuration/DemonstrationOnlyPreAuthenticationConfiguration.java b/uw-spring-security-sample-war/src/main/java/edu/wisc/uwss/sample/configuration/DemonstrationOnlyPreAuthenticationConfiguration.java index 0fe76ba93204f8c95682c985b91d5019843751aa..8fa219e701c99ec51aac505f582cfaad06b575de 100644 --- a/uw-spring-security-sample-war/src/main/java/edu/wisc/uwss/sample/configuration/DemonstrationOnlyPreAuthenticationConfiguration.java +++ b/uw-spring-security-sample-war/src/main/java/edu/wisc/uwss/sample/configuration/DemonstrationOnlyPreAuthenticationConfiguration.java @@ -29,6 +29,9 @@ import org.springframework.web.filter.DelegatingFilterProxy; import com.github.nblair.web.PreAuthenticationSimulationServletFilter; +import edu.wisc.uwss.configuration.HttpSecurityAmender; +import edu.wisc.uwss.configuration.development.SimulatePreAuthenticationHttpSecurityAmender; + /** * Demonstration-only sample {@link Configuration}. * This Configuration injects a Servlet {@link Filter} that is useful for development environments @@ -40,11 +43,14 @@ import com.github.nblair.web.PreAuthenticationSimulationServletFilter; * @author Nicholas Blair */ @Configuration -@Profile("preauth") +@Profile("preauth-simulate-netid") public class DemonstrationOnlyPreAuthenticationConfiguration { @Inject private Environment environment; + + @Inject + private AuthenticationManager authenticationManager; /** * When "preauth" is enabled, we need to inject the {@link #authenticationFilter()} in the right * spot in the Spring Security FilterChain. @@ -56,10 +62,9 @@ public class DemonstrationOnlyPreAuthenticationConfiguration { * @throws ServletException * @throws Exception */ - @Autowired - protected void amendHttpSecurity(HttpSecurity httpSecurity, AuthenticationManager authenticationManager) throws ServletException, Exception { - httpSecurity - .addFilterBefore(preAuthenticationSimulationFilter(), SecurityContextPersistenceFilter.class);; + @Bean + protected HttpSecurityAmender httpSecurityAmender(AuthenticationManager authenticationManager) throws ServletException, Exception { + return new SimulatePreAuthenticationHttpSecurityAmender(preAuthenticationSimulationFilter()); } /** * This Filter is intended to simulate pre-authentication by making every request appear to have the user attributes diff --git a/uw-spring-security-sample-war/src/main/java/edu/wisc/uwss/sample/configuration/SampleWebSecurityConfiguration.java b/uw-spring-security-sample-war/src/main/java/edu/wisc/uwss/sample/configuration/SampleWebSecurityConfiguration.java index ae21a81e006f3aedc56cda2acb914430cbddbe3d..7d80575218125a815dfa387f0370b007437f31e9 100644 --- a/uw-spring-security-sample-war/src/main/java/edu/wisc/uwss/sample/configuration/SampleWebSecurityConfiguration.java +++ b/uw-spring-security-sample-war/src/main/java/edu/wisc/uwss/sample/configuration/SampleWebSecurityConfiguration.java @@ -6,10 +6,13 @@ package edu.wisc.uwss.sample.configuration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import edu.wisc.uwss.configuration.HttpSecurityAmender; + /** * This {@link Configuration} class for the "local-users" {@link Profile} provides an example of how one would * amend the {@link HttpSecurity} initialized in the various configuration classes in uw-spring-security-config. @@ -22,19 +25,24 @@ public class SampleWebSecurityConfiguration { static final Logger logger = LoggerFactory.getLogger(SampleWebSecurityConfiguration.class); /** * This example puts a constraint on the "/required" and "/profile" URLs, requiring visitors be authenticated. - * - * @param http the {@link HttpSecurity} instance made available via other {@link Configuration} classes in the -config module + * * @throws Exception see {@link HttpSecurity#authorizeRequests()} */ - @Autowired - public void amendHttpSecurity(HttpSecurity http) throws Exception { - logger.info("amendHttpSecurity: setting up access controls for known urls"); - http.authorizeRequests() - .antMatchers("/favicon.ico").permitAll() - .antMatchers("/index.html").permitAll() - .antMatchers("/lazy").permitAll() - .antMatchers("/required").authenticated() - .antMatchers("/profile").authenticated(); + @Bean + public HttpSecurityAmender httpSecurityAmender() throws Exception { + return new HttpSecurityAmender() { + @Override + public void amend(HttpSecurity http) throws Exception { + logger.info("amendHttpSecurity: setting up access controls for known urls"); + http.authorizeRequests() + .antMatchers("/favicon.ico").permitAll() + .antMatchers("/index.html").permitAll() + .antMatchers("/lazy").permitAll() + .antMatchers("/required").authenticated() + .antMatchers("/profile").authenticated(); + } + }; + } } diff --git a/uw-spring-security-sample-war/src/main/webapp/index.html b/uw-spring-security-sample-war/src/main/webapp/index.html index 88712c225aa9a72c5b13b80d7742b4f529728b70..45116929dd2bae01e5a2ff1c78a1cc6e928c41ce 100644 --- a/uw-spring-security-sample-war/src/main/webapp/index.html +++ b/uw-spring-security-sample-war/src/main/webapp/index.html @@ -32,9 +32,19 @@ <li>Visit http://localhost:8080/index.html. Click 'Lazy authentication', expect JSON object representing UWUserDetails for 'Amy Administrator'.</li> <li>Visit http://localhost:8080/index.html. Click 'Required authentication', expect JSON object representing UWUserDetails for 'Amy Administrator'.</li> </ol> + + <h3>combined</h3> + <p>Start VM eith 'mvn clean install jetty:run -P combined', visit http://localhost:8080/.</p> + <p>Note that with the 'combined' test here, we have nothing providing preauthentication attributes, so the app falls back to local-users forms. To see combined + with something that provides preauthentication attributes, see the 'combined-simulate-netid' test.</p> + <ol> + <li>Click 'Lazy authentication', expect "anonymousUser".</li> + <li>Visit http://localhost:8080/index.html. Click 'Lazy with "ignorepreauth"', expect "anonymousUser".</li> + <li>Visit http://localhost:8080/index.html. Click /required, expect login form. Enter credentials, submit, and expect JSON object representing current UWUserDetails.</li> + </ol> - <h3>combined-auth</h3> - <p>Start VM with 'mvn clean install jetty:run -P combined', visit http://localhost:8080/.</p> + <h3>combined-simulate-netid</h3> + <p>Start VM with 'mvn clean install jetty:run -P combined-simulate-netid', visit http://localhost:8080/.</p> <ol> <li>Click 'Lazy with "ignorepreauth"', expect "anonymousUser".</li> <li>Visit http://localhost:8080/index.html. Click 'Lazy authentication', expect JSON object representing UWUserDetails for 'Amy Administrator'.</li>