title: Combining basic authentication and form login for the same REST Api
body: <p>Is there a way to set up basic authentication and form login for the same REST service? I'd like to let logged in user trigger this service both through web browser after loggin in and from command line running <code>curl -u username:password hostname.com/api/process</code>
  Now I've seen this post: <a href="https://stackoverflow.com/questions/18729752/basic-and-form-based-authentication-with-spring-security-javaconfig">Basic and form based authentication with Spring security Javaconfig</a>
  but it's slightly different from what I'm trying to do. 
  Is there a way to set this up with spring? 
  What I have now is this:</p>
  
  <pre><code>package com.my.company.my.app.security;
  
  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.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.crypto.bcrypt.BCryptPasswordEncoder;
  import org.springframework.security.crypto.password.PasswordEncoder;
  import org.springframework.security.provisioning.JdbcUserDetailsManager;
  
  import javax.sql.DataSource;
  
  @Configuration
  @EnableWebSecurity
  public class SecurityConfig extends WebSecurityConfigurerAdapter {
  
      @Autowired
      DataSource dataSource;
  
      private static final org.slf4j.Logger logger = LoggerFactory.getLogger(SecurityConfig.class);
  
      @Override
      protected void configure(HttpSecurity http) throws Exception {
          http
                  .authorizeRequests()
                  .antMatchers("/js/**", "/css/**")
                  .permitAll();
  
          http
                  .authorizeRequests()
                  .antMatchers("/api/**")
                  .authenticated()
                  .and()
                  .httpBasic();
  
          http
                  .authorizeRequests()
                  .antMatchers("/","/index")
                  .authenticated()
                  .and()
                  .formLogin()
                  .loginPage("/login")
                  .loginProcessingUrl("/j_spring_security_check")
                  .defaultSuccessUrl("/monitor")
                  .failureUrl("/login?error")
                  .usernameParameter("j_username")
                  .passwordParameter("j_password")
                  .permitAll()
                  .and()
                  .logout()
                  .logoutUrl("/j_spring_security_logout")
                  .logoutSuccessUrl("/login?logout")
                  .permitAll()
                  .and()
                  .csrf()
                  .disable();
      }
  
      @Autowired
      public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
          auth.jdbcAuthentication().dataSource(dataSource)
                  .passwordEncoder(passwordEncoder())
                  .usersByUsernameQuery("SELECT username, password, enabled FROM users WHERE username=?")
                  .authoritiesByUsernameQuery("SELECT username, authority FROM authorities WHERE username=?");
      }
  
      @Bean
      public PasswordEncoder passwordEncoder() {
          PasswordEncoder encoder = new BCryptPasswordEncoder();
          return encoder;
      }
  }
  </code></pre>
  
  <p>The only problem is that it doesn't redirect to my login page when <code>hostname.com/index</code> or <code>hostname.com/</code> is called instead window pop ups asking for basic authentication credentials. </p>