title: Spring Boot Security redirect after successful login - undefined
body: <p>I have followed the <a href="https://spring.io/guides/gs/securing-web/" rel="noreferrer">spring boot security tutorial</a> but the end result has an issue consisting in that <em>after successful login the browser is redirect to <code>/undefined</code></em>.</p>
  
  <p>I have even cloned the code referenced in the tutorial, thinking I have typed something wrong, or forgot to add a component or something. No, the same issue is there.</p>
  
  <p>Searching on Stackoverflow I found out that you need to define the default success URL in the <code>configure</code> method of the <code>WebSecurityConfigurerAdapter</code> like so:</p>
  
  <pre><code>.defaultSuccessUrl("/")
  </code></pre>
  
  <p>but still no go. Accessing a protected resource leads to the login page and upon successful login I don't get redirected to the protected resource. I get to the '/undefined' page. Forcing the success works, however:</p>
  
  <pre><code>.defaultSuccessUrl("/", true)
  </code></pre>
  
  <p>... but this is not what I would need because after successful login the user should be redirected to secured resource (initially) requested.</p>
  
  <hr>
  
  <p>Here's the relevant parts of the project:</p>
  
  <p><strong>WebSecurityConfig:</strong></p>
  
  <pre><code>package ro.rinea.andrei.Security;
  
  import org.springframework.beans.factory.annotation.Autowired;
  import org.springframework.context.annotation.Configuration;
  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;
  
  @Configuration
  @EnableWebSecurity
  public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
      @Override
      protected void configure(HttpSecurity http) throws Exception {
          http.authorizeRequests()
                  .antMatchers("/").permitAll()
                  .anyRequest().authenticated()
                  .and()
              .formLogin()
                  .loginPage("/login")
                  .defaultSuccessUrl("/")
                  .permitAll()
                  .and()
              .logout()
                  .permitAll();
      }
  
      @Autowired
      public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
          auth.inMemoryAuthentication()
              .withUser("user").password("password").roles("USER");
      }
  }
  </code></pre>
  
  <p><strong>Controller:</strong></p>
  
  <pre><code>package ro.rinea.andrei.Controllers;
  
  import org.springframework.stereotype.Controller;
  import org.springframework.web.bind.annotation.RequestMapping;
  
  @Controller
  public class WebController {
  
      @RequestMapping("/")
      public String index() {
          return "index";
      }
  
      @RequestMapping("/salut")
      public String salut() {
          return "salut";
      }
  
      @RequestMapping("/login")
      public String login() {
          return "login";
      }
  }
  </code></pre>
  
  <p>There are views defined for <code>index</code>, <code>login</code> and <code>salut</code> (if needed I will add their contents)</p>
  
  <p>and the build.gradle file:</p>
  
  <pre><code>buildscript {
      ext {
          springBootVersion = '1.4.0.RELEASE'
      }
      repositories {
          mavenCentral()
      }
      dependencies {
          classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
      }
  }
  
  apply plugin: 'java'
  apply plugin: 'idea'
  apply plugin: 'spring-boot'
  
  jar {
      baseName = 'tstBut'
      version = '0.0.1-SNAPSHOT'
  }
  sourceCompatibility = 1.8
  targetCompatibility = 1.8
  
  repositories {
      mavenCentral()
  }
  
  
  dependencies {
      compile('org.springframework.boot:spring-boot-devtools')
      compile('org.springframework.boot:spring-boot-starter-jdbc')
      compile('org.springframework.boot:spring-boot-starter-jersey')
      compile('org.springframework.boot:spring-boot-starter-mobile')
      compile('org.springframework.boot:spring-boot-starter-thymeleaf')
      compile('org.springframework.boot:spring-boot-starter-validation')
      compile('org.springframework.boot:spring-boot-starter-web')
      compile('org.springframework.boot:spring-boot-starter-web-services')
      compile('org.springframework.boot:spring-boot-starter-security')
      runtime('org.postgresql:postgresql')
      testCompile('org.springframework.boot:spring-boot-starter-test')
      testCompile('org.springframework.restdocs:spring-restdocs-mockmvc')
  }
  </code></pre>