2016-08-23 4 views
0

Ich habe eine einfache Spring Boot/JS App erstellt. In einem nächsten Schritt habe ich versucht, eine Usermanagement-Funktion für mehrere Benutzer zu implementieren.Spring Boot JS App funktioniert nicht, nachdem ich Rest-Api mit Spring Security gesichert habe

Also habe ich ein Usermodel und Controller implementiert und alle Rest-API-Anrufe über die Authentifizierung der Federsicherheit gesichert.

@Configuration 
@EnableWebSecurity 
@ComponentScan("package.packagename") 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

@Autowired 
DataSource dataSource; 
@Autowired 
public void configAuthentication(AuthenticationManagerBuilder auth) throws Exception{ 

    auth.jdbcAuthentication().dataSource(dataSource) 
      .usersByUsernameQuery("select email, password, active from accounts where email=?") 
      .authoritiesByUsernameQuery("select email, role from account_roles where email=?"); 
} 

@Override 
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER) 
protected void configure(HttpSecurity http) throws Exception { 
     http 
       .formLogin().permitAll() 
       .and() 
       .authorizeRequests() 
       .antMatchers("/index.html", "/").permitAll() 
       .anyRequest().authenticated() 
       .and() 
       .logout();      
    } 
} 

Zusätzlich zu dieser Datei habe ich die SecurityWebApplicationInitializer

public class SecurityWebApplicationInitializer 
    extends AbstractSecurityWebApplicationInitializer { 

public SecurityWebApplicationInitializer() { 
    super(SecurityConfig.class); 
} 
} 

jetzt Mein Problem ist die Tatsache ist, dass, wenn ich die Anwendung zu starten und versuchen Sie es über den Local Host zuzugreifen: 8080 ich einen Fehler 404 gegenüber. Normalerweise sollte die App auch ohne Anmeldung funktionieren und es scheint, dass mit SpringSecurity aktiviert die App nicht in der Lage ist, die js Sachen in Ressourcen/öffentlichen Verzeichnis zu laden.

die Protokolle Lesen zeigte folgendes:

Keine Zuordnung für HTTP-Anforderung mit URI gefunden [/] in DispatcherServlet mit dem Namen 'DispatcherServlet'

Wenn starte ich die App ohne Federsicherheits es funktioniert ohne Probleme.

Die Sicherung der API-Anrufe funktioniert wie ein Zauber - ich kann mich anmelden, ein Cookie erhalten und dieses Cookie verwenden, um sich gegen die api-Funktionen zu authentifizieren, die durch SpringSecurity gesichert sind.

Ich hoffe, Sie können mir helfen, mein (hoffentlich kleines) Problem zu lösen.

Vielen Dank im Voraus

Antwort

0

Ich fand heraus, dass ich hinzufügen eine WebConfig.java-Klasse wie diese:

import org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration; 
import org.springframework.context.annotation.ComponentScan; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.web.servlet.config.annotation.EnableWebMvc; 
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; 
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; 

@Configuration 
@EnableWebMvc 
@ComponentScan 
public class WebConfig extends WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter { 

} 

Jetzt Frühling ist in der Lage, die/richtig zu lösen. Ich muss nur den Zugriff auf alle öffentlichen Dateien für alle Benutzer öffnen (Funktion permitall()).

Trotzdem danke für Ihre Hilfe :-)

0

Wenn Sie .formLogin() verwenden, müssen Sie die Login-Seite oder benutzen .httpBasic() Auth definieren. So können Sie etwas wie folgt verwenden können:

.formLogin()      
     .and() 
    .httpBasic(); 

oder

.formLogin() 
     .loginPage("/login.html") 

Sie können mehr hier lesen

http://docs.spring.io/spring-security/site/docs/3.2.x/guides/form.html

http://www.baeldung.com/spring-security-login

+0

Dies ist nicht mein Problem. Ich kann nach dem Login nicht auf mein Frontend zugreifen. Das Hauptproblem ist das: 'o.s.web.servlet.PageNotFound: Keine Zuordnung für HTTP-Anforderung mit URI [/] in DispatcherServlet mit dem Namen 'DispatcherServlet'-Fehler gefunden. Nach einer erfolgreichen Anmeldung kann ich nicht auf die Website zugreifen - ich bekomme nur eine 404 Nachricht ... – rudolf

+0

Haben Sie eine Seite/Ressource auf der/URI konfiguriert? – reos

+0

Ich weiß nicht, was du damit meinst.Ich habe einfach jedes Frontend-Zeug in Ressourcen/öffentliches Verzeichnis gesteckt und es funktionierte ohne Federsicherheit. Habe ich etwas in SpringSecurity konfiguriert? – rudolf

Verwandte Themen