Spring Boot security montre Http Basic Auth popup après l'échec de la connexion

Je suis en train de créer une application simple pour un projet d'école, le Printemps de Démarrage backend et AngularJS frontend, mais ont un problème avec la sécurité que je n'arrive pas à résoudre.

Connectant fonctionne parfaitement, mais quand je tape un mauvais mot de passe de connexion par défaut de popup s'affiche, ce qui est un peu ennuyeux. J'ai essayé de l'annotation 'BasicWebSecurity" et en mettant httpBassic sur désactivé, mais sans résultat (ce qui signifie que la procédure de connexion ne fonctionne pas du tout).

Ma classe de sécurité:

package be.italent.security;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.security.SecurityProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
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.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.web.csrf.CsrfFilter;
import org.springframework.security.web.csrf.CsrfToken;
import org.springframework.security.web.csrf.CsrfTokenRepository;
import org.springframework.security.web.csrf.HttpSessionCsrfTokenRepository;
import org.springframework.web.filter.OncePerRequestFilter;
import org.springframework.web.util.WebUtils;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsService userDetailsService;
@Autowired
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService);
}
@Override
public void configure(WebSecurity web){
web.ignoring()
.antMatchers("/scripts/**/*.{js,html}")
.antMatchers("/views/about.html")
.antMatchers("/views/detail.html")
.antMatchers("/views/home.html")
.antMatchers("/views/login.html")
.antMatchers("/bower_components/**")
.antMatchers("/resources/*.json");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.httpBasic()
.and()
.authorizeRequests()
.antMatchers("/user", "/index.html", "/", "/projects/listHome", "/projects/{id}", "/categories", "/login").permitAll().anyRequest()
.authenticated()
.and()
.csrf().csrfTokenRepository(csrfTokenRepository())
.and()
.addFilterAfter(csrfHeaderFilter(), CsrfFilter.class).formLogin();
}
private Filter csrfHeaderFilter() {
return new OncePerRequestFilter() {
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
CsrfToken csrf = (CsrfToken) request.getAttribute(CsrfToken.class
.getName());
if (csrf != null) {
Cookie cookie = WebUtils.getCookie(request, "XSRF-TOKEN");
String token = csrf.getToken();
if (cookie == null || token != null
&& !token.equals(cookie.getValue())) {
cookie = new Cookie("XSRF-TOKEN", token);
cookie.setPath("/");
response.addCookie(cookie);
}
}
filterChain.doFilter(request, response);
}
};
}
private CsrfTokenRepository csrfTokenRepository() {
HttpSessionCsrfTokenRepository repository = new HttpSessionCsrfTokenRepository();
repository.setHeaderName("X-XSRF-TOKEN");
return repository;
}
}

Quelqu'un a une idée sur la façon d'empêcher cette fenêtre montrant sans casser le reste?

solution

Ajouté ça à mon Angulaire config:

myAngularApp.config(['$httpProvider',
function ($httpProvider) {
$httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
}
]);
  • la sécurité de votre config ressemble un peu à confusion. Tout d'abord vous activer httpBasic. alors vous voulez utiliser le formulaire de connexion et que vous voulez désactiver httpBasic. Pour moi il n'est pas clair CE que vous souhaitez protéger et de quelle manière. Le csrfHeaderFilter semble que vous avez un angularJS frontend est-ce le cas?
  • Merde, j'ai fait un mauvais copier/coller. La finale httpBasic().disable() n'est pas censé être là. Mon mauvais! C'est en effet un angularJS frontend.
  • Ok. Une réponse sera fournie dans quelques minutes. J'espère que c'est ce que vous voulez atteindre. Si non faites le moi savoir dans les commentaires.
  • Est votre problème résolu maintenant?
  • Oui, merci beaucoup, l'homme!
InformationsquelleAutor Dennie | 2016-06-11