content: package com.anilallewar.microservices.auth.config;
  
  import org.springframework.beans.factory.annotation.Autowired;
  import org.springframework.context.annotation.Configuration;
  import org.springframework.core.annotation.Order;
  import org.springframework.security.authentication.AuthenticationManager;
  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.builders.WebSecurity;
  import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
  import org.springframework.security.config.http.SessionCreationPolicy;
  import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
  import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
  
  @Configuration
  public class OAuthWebFormConfiguration extends WebMvcConfigurerAdapter {
  	
  	@Override
  	public void addViewControllers(ViewControllerRegistry registry) {
  		registry.addViewController("/login").setViewName("login");
  		registry.addViewController("/oauth/confirm_access").setViewName("authorize");
  	}
  
  	@Configuration
  	@Order(-20)
  	protected static class LoginConfig extends WebSecurityConfigurerAdapter {
  
  		@Autowired
  		private AuthenticationManager authenticationManager;
  
  		@Override
  		protected void configure(HttpSecurity http) throws Exception {
  			// @formatter:off
  			http
  				.sessionManagement()
  					.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
  				.and()
  					.formLogin()
  						.loginPage("/login")
  							.permitAll()
  				.and()
  					.requestMatchers()
  						.antMatchers("/login", "/oauth/authorize", "/oauth/confirm_access")
  				.and()
  					.authorizeRequests()
  						.anyRequest()
  							.authenticated();
  			// @formatter:on
  		}
  
  		@Override
  		protected void configure(AuthenticationManagerBuilder auth) throws Exception {
  			auth.parentAuthenticationManager(authenticationManager);
  		}
  		
  		// Swagger specific, allow access
  		@Override
  		public void configure(WebSecurity web) throws Exception {
  			// @formatter:off
  			web
  				.ignoring()
  					.antMatchers("/v2/api-docs", "/configuration/ui", "/swagger-resources/**", "/configuration/**",
  					"/swagger-ui.html", "/webjars/**");
  			// @formatter:on
  		}
  	}
  	
  }
  