code: 	private ApplicationContext getContext() {
  		return getSharedObject(ApplicationContext.class);
  	}
  
  	/**
  	 * Allows configuring OpenID based authentication.
  	 *
  	 * <h2>Example Configurations</h2>
  	 *
  	 * A basic example accepting the defaults and not using attribute exchange:
  	 *
  	 * <pre>
  	 * &#064;Configuration
  	 * &#064;EnableWebSecurity
  	 * public class OpenIDLoginConfig extends WebSecurityConfigurerAdapter {
  	 *
  	 * 	&#064;Override
  	 * 	protected void configure(HttpSecurity http) {
  	 * 		http.authorizeRequests().antMatchers(&quot;/**&quot;).hasRole(&quot;USER&quot;).and().openidLogin()
  	 * 				.permitAll();
  	 * 	}
  	 *
  	 * 	&#064;Override
  	 * 	protected void configure(AuthenticationManagerBuilder auth) throws Exception {
  	 * 		auth.inMemoryAuthentication()
  	 * 				// the username must match the OpenID of the user you are
  	 * 				// logging in with
  	 * 				.withUser(
  	 * 						&quot;https://www.google.com/accounts/o8/id?id=lmkCn9xzPdsxVwG7pjYMuDgNNdASFmobNkcRPaWU&quot;)
  	 * 				.password(&quot;password&quot;).roles(&quot;USER&quot;);
  	 * 	}
  	 * }
  	 * </pre>
  	 *
  	 * A more advanced example demonstrating using attribute exchange and providing a
  	 * custom AuthenticationUserDetailsService that will make any user that authenticates
  	 * a valid user.
  	 *
  	 * <pre>
  	 * &#064;Configuration
  	 * &#064;EnableWebSecurity
  	 * public class OpenIDLoginConfig extends WebSecurityConfigurerAdapter {
  	 *
  	 * 	&#064;Override
  	 * 	protected void configure(HttpSecurity http) {
  	 * 		http.authorizeRequests()
  	 * 				.antMatchers(&quot;/**&quot;)
  	 * 				.hasRole(&quot;USER&quot;)
  	 * 				.and()
  	 * 				.openidLogin()
  	 * 				.loginPage(&quot;/login&quot;)
  	 * 				.permitAll()
  	 * 				.authenticationUserDetailsService(
  	 * 						new AutoProvisioningUserDetailsService())
  	 * 				.attributeExchange(&quot;https://www.google.com/.*&quot;).attribute(&quot;email&quot;)
  	 * 				.type(&quot;http://axschema.org/contact/email&quot;).required(true).and()
  	 * 				.attribute(&quot;firstname&quot;).type(&quot;http://axschema.org/namePerson/first&quot;)
  	 * 				.required(true).and().attribute(&quot;lastname&quot;)
  	 * 				.type(&quot;http://axschema.org/namePerson/last&quot;).required(true).and().and()
  	 * 				.attributeExchange(&quot;.*yahoo.com.*&quot;).attribute(&quot;email&quot;)
  	 * 				.type(&quot;http://schema.openid.net/contact/email&quot;).required(true).and()
  	 * 				.attribute(&quot;fullname&quot;).type(&quot;http://axschema.org/namePerson&quot;)
  	 * 				.required(true).and().and().attributeExchange(&quot;.*myopenid.com.*&quot;)
  	 * 				.attribute(&quot;email&quot;).type(&quot;http://schema.openid.net/contact/email&quot;)
  	 * 				.required(true).and().attribute(&quot;fullname&quot;)
  	 * 				.type(&quot;http://schema.openid.net/namePerson&quot;).required(true);
  	 * 	}
  	 * }
  	 *
  	 * public class AutoProvisioningUserDetailsService implements
  	 * 		AuthenticationUserDetailsService&lt;OpenIDAuthenticationToken&gt; {
  	 * 	public UserDetails loadUserDetails(OpenIDAuthenticationToken token)
  	 * 			throws UsernameNotFoundException {
  	 * 		return new User(token.getName(), &quot;NOTUSED&quot;,
  	 * 				AuthorityUtils.createAuthorityList(&quot;ROLE_USER&quot;));
  	 * 	}
  	 * }
  	 * </pre>
  	 *
  	 * @return the {@link OpenIDLoginConfigurer} for further customizations.
  	 *
  	 * @throws Exception
  	 * @see OpenIDLoginConfigurer
  	 */
  