2016-12-09 18 views
0

Ich habe ein Problem mit meinem Spring SecuritySpring Security HTTP FormLogin

@Configuration 
@EnableWebSecurity 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 

    @Autowired 
    private UsuarioService usuarioService; 

    @Autowired 
    private PasswordEncoder passwordEncoder; 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 

     // @formatter:off 

     http 
       .authorizeRequests() 
        .antMatchers(
          "/", 
          "/index/**", 
          "/register", 
          "/doregister", 
          "/login", 
          "/dologin", 
          "/logout-success", 
          "/confirmregister", 
          "/invaliduser", 
          "/expiredtoken", 
          "/userstatuslog", 
          "/verifyemail") 
        .permitAll() 
         .anyRequest() 
          .authenticated() 
      .and() 
       .authorizeRequests() 
        .antMatchers(
          "/login", 
          "logout") 
        .permitAll() 
      .and() 
       .authorizeRequests() 
        .antMatchers(
          "/static/css/**", 
          "/css/custom.css", 
          "/js/**", 
          "/images/**" 
          ) 
         .permitAll() 
      .and() 
       .authorizeRequests() 
        .antMatchers(
          "/forbidden", 
          "/edit-profile-about", 
          "/doeditprofileabout",      
          "/profile" 
          ) 
        .hasRole("USER") 
      .and() 
       .authorizeRequests() 
        .antMatchers(
          "/controlpanel", 
          "/forbidden", 
          "/edit-profile-about", 
          "/doeditprofileabout",      
          "/profile" 
          ) 
        .hasRole("ADMIN") 
      .and() 
       .formLogin() 
        .loginPage("/login") 
         .defaultSuccessUrl("/") 
          .permitAll() 
      .and() 
       .logout() 
        .deleteCookies("remove") 
         .invalidateHttpSession(true) 
          .logoutUrl("/logout") 
       .logoutSuccessUrl("/logout-success") 
        .logoutRequestMatcher(new AntPathRequestMatcher("/logout")); 

     // @formatter:on 
    } 

    @Override 
    protected void configure(AuthenticationManagerBuilder auth) throws Exception { 

     auth.userDetailsService(usuarioService).passwordEncoder(passwordEncoder); 
    } 

Jedesmal, ich melde es mich in die Bootstrap-Datei sendet ...

localhost: 8080/css/Bootstrap -3.3.7-dist/css/bootstrap.min.css

oder ...

localhost: 8080/css/custom.css

oder ...

localhost: 8080/js/jquery-2.1.4.min.js

aber nicht zu dem gleichen (es scheint zufällig! :-)

Dann funktioniert manchmal die CSS und manchmal nicht. Im Login-Formular gibt es keine Stile, sondern nur manchmal, denn wenn ich die App starte, hat sie die Stile. Und wenn ich mich auch anmelde, aber nicht wenn ich mich abmelde oder versuche mich nochmal einzuloggen. Wenn der Benutzer korrekt angemeldet ist, hat er wieder Styles.

Und als ich versuchte, mit einem Benutzer (mit ROLE_USER) auf "/ controlpanel" zuzugreifen, erlaubt es Zugriff (und sollte es nicht), aber wenn ich es mit einem Benutzer (Role_ADMIN) mache, funktioniert es gut.

Antwort

0

Es passiert, wenn Ihre statischen Ressourcen von Spring Security gefiltert werden sich ändern.

versuchen, diese Ressourcen überhaupt zu ignorieren:

@Override 
     public void configure(WebSecurity web) throws Exception { 
      web.ignoring().antMatchers("/path/**"); 
     } 

definieren Muster alle Standorte gerecht zu werden.

+0

Danke, aber es funktioniert nicht. Ich schließe die statischen, css, js, Bilder in diese Pfade ein, aber es funktioniert nicht. Weißt du irgendeine Dokumentation, die ich mir ansehen kann? Danke noch einmal. – Mike

+0

Was bedeutet es, dass es nicht funktioniert? Wenn Sie sehen, welche Ressourcen gelesen werden, während die Seite geladen ist (in den Webentwickler-Tools, Registerkarte Netzwerk), sehen Sie 'HTTP 401' für Ihre statischen Inhaltsdateien? Oder irgendetwas anderes?Fügen Sie weitere Details hinzu. – Artegon

+0

Danke, es funktioniert jetzt – Mike

0

Das Problem ist, dass Ihre CSS-Dateien nicht von Gast zugegriffen werden kann. Sie werden also nach dem Login zurückgeleitet. Manchmal funktioniert css in der Login-Seite wegen Browser-Caching.

Versuchen Sie, Ihre Konfiguration zu

http 
    .authorizeRequests() 
     .antMatchers(
       "/", 
       "/index/**", 
       "/register", 
       ...).permitAll() 
     .antMatchers(
       "/login", 
       "logout").permitAll() 
     .antMatchers(   // You need to add all css file here 
       "/static/css/**", 
       "/css/custom.css", 
       "/css/bootstrap-3.3.7-dist/css/bootstrap.min.cs‌​‌​‌​s", 
       "/js/**", 
       "/images/**").permitAll() 
     .antMatchers(
       "/forbidden", 
       "/edit-profile-about", 
       "/doeditprofileabout",      
       "/profile").hasRole("USER") 
     .antMatchers(
       "/controlpanel", 
       "/forbidden", 
       "/edit-profile-about", 
       "/doeditprofileabout",      
       "/profile").hasRole("ADMIN") 
     .anyRequest().authenticated() 
    .and() 
     ... 
+0

Hallo, es zeigt immer noch das localhost: 8080/css/bootstrap-3.3.7-dist/css/bootstrap.min.css nach dem Login ... Danke – Mike

+0

Kennen Sie irgendwelche Dokumentation, die ich mir ansehen kann ? Danke noch einmal. – Mike

+0

Hallo, es zeigt immer noch den localhost: 8080/css/bootstrap-3.3.7-dist/css/bootstrap.min.cs s nach dem Login ... Es wurde vorher kein Fehler angezeigt. Danke – Mike

Verwandte Themen