2014-07-13 14 views
10

Sto costruendo un'applicazione Spring MVC con Spring Security e Bootstrap nei miei file HTML (template di Thymeleaf). La parte Spring Security si basa sulla Spring Guide for Spring Security e combinata con un server delle applicazioni Spring Boot.Spring Security "Rifiutato di eseguire script da ..."

Dopo aver abilitato Primavera di sicurezza del file di bootstrap css non verrà caricato con il messaggio di errore:

Refused to execute script from 'http://localhost:8080/js/bootstrap.min.js' because its MIME type ('text/html') is not executable, and strict MIME type checking is enabled. 

Il messaggio di errore di cui sopra proviene dalla console Chrome sviluppatore.

Quello che ho provato:

  • Disabilitazione della funzione Sicurezza Primavera => bootstrap css funziona di nuovo, ma ho bisogno della sicurezza
  • ricerca sui forum di primavera, ma c'è un loop collegamento senza soluzione
  • Aggiunta di un gestore risorse, ma non riesco a vedere che il gestore venga richiamato né l'errore scompare
  • Aggiunta della ris ONTI percorso del permit chiamata

La mia struttura dir:

/main 
    |-> /java 
     | BootStart.java 
     |-> /security 
       |SecurityConfiguration.java 
    |-> /resources 
     |-> /static 
       |-> /css /** bootstrap location */ 
       |-> /js 
       |-> /fonts 
     |-> /templates 
       | /user 
        | sample.html 

BootStart.java è il file java che viene raccolto da primavera Boot.

BootStart.java:

@EnableAutoConfiguration 
@ComponentScan 
public class BootStart { 
    public static void main(String[] args) { 
     SpringApplication.run(BootStart.class, args); 
    } 
} 

SecurityConfiguration.java:

@Configuration 
@EnableWebSecurity 
public class SecurityConfiguration extends WebSecurityConfigurerAdapter { 
    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http 
       .formLogin() 
       .loginPage("/login") 
       .permitAll() 
       .and() 
       .logout() 
       .permitAll(); 
     http 
       .authorizeRequests() 
       .antMatchers("/", "/resources/static/**").permitAll() 
       .anyRequest().authenticated(); 

    } 

    @Override 
    protected void configure(AuthenticationManagerBuilder auth) throws Exception { 
     auth 
       .inMemoryAuthentication() 
       .withUser("user").password("password").roles("USER"); 
    } 
} 

Sample.html:

<!DOCTYPE HTML> 
<html> 
<head> 
    <link rel="stylesheet" th:href="@{/css/bootstrap.css}" href="../../css/bootstrap.min.css"/> 
    <link rel="stylesheet" th:href="@{/css/bootstrap-theme.css}" href="../../css/bootstrap-theme.min.css"/> 
    <title></title> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
</head> 
<body> 
<div class="alert alert-danger" role="alert">!Basic template!</div> 

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
<script src="js/bootstrap.min.js"></script> 

</body> 
</html> 

Attualmente sto usando le seguenti dipendenze nel mio pom:

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-thymeleaf</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.springframework.security</groupId> 
    <artifactId>spring-security-core</artifactId> 
    <version>3.2.4.RELEASE</version> 
</dependency> 
<dependency> 
    <groupId>org.springframework.security</groupId> 
    <artifactId>spring-security-web</artifactId> 
    <version>3.2.4.RELEASE</version> 
</dependency> 
<dependency> 
    <groupId>org.springframework.security</groupId> 
    <artifactId>spring-security-config</artifactId> 
    <version>3.2.4.RELEASE</version> 
</dependency> 

Come configurare Spring Security in modo che sia possibile caricare i file css/js dalla directory delle risorse/statiche?

+0

sto affrontando lo stesso problema, hai trovato una soluzione? – vratojr

+0

Ecco la mia risposta: [Come impostare Primavera di sicurezza per consentire webjars] [1] [1]: http://stackoverflow.com/a/31893880/912829 – ACV

risposta

16

Si prega di controllare questo answer da altri con simile domanda.

Se si posizionano i file js nella directory /js/, non è necessario questo tipo di errore MIME.
E, per i file JavaScript, è meglio disattivare la protezione per loro:

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

implementato il codice, lo stesso problema ancora .. –

0

Ho avuto lo stesso errore dopo l'aggiunta di un nuovo metodo a un controller.

Ho dimenticato di fornire un valore per l'annotazione @GetMapping e lo stesso @Controller non era associato a nessun URL. Abbastanza werdly aggiungendo @GetMapping("/foo") al mio metodo ha risolto il problema. Non ho ancora capito perché sia ​​successo, ma ho intenzione di scoprirlo.

0

Ho avuto lo stesso errore anche con la stessa struttura di cartelle, era nel file css.

Tutto quello che ho fatto è aggiunta /css/** in antMatcher() come di seguito:

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

    httpSecurity 
     .authorizeRequests() 
      .antMatchers("/css/**").permitAll() //Adding this line solved it 
      .anyRequest().fullyAuthenticated() 
      .and() 
     .formLogin() 
      .loginPage("/login").permitAll() 
      .loginProcessingUrl("/sign-in") 
      .defaultSuccessUrl("/home") 
      .failureUrl("/error") 
      .and() 
     .logout() 
      .logoutSuccessUrl("/logout") 
      .permitAll() 
      .and() 
     .csrf().disable(); 

} 

Nel tuo caso è sufficiente aggiungere /js/** nel antMatcher() e quindi utilizzare permitAll()

Problemi correlati