2012-03-30 10 views
6

Sto utilizzando Spring 3, configurazione basata su Java, con BootStrap.Spring 3, con configurazione basata su Java e problema di accesso alle risorse

Ho scaricato il bootstrap e ho inserito css e js nella directory delle risorse.

Il problema che non riesco a utilizzare questi file .css dalla pagina dei freemarker. Come se li avessi importati. Come io sto usando la configurazione basato su Java, ho aggiunto il "addResourceHandler" come segue:

WebAppConfig:

@Configuration 
@EnableWebMvc 
@ComponentScan("com.springway") 
public class WebConfig implements WebApplicationInitializer { 

    @Override 
    public void onStartup(final ServletContext servletContext) throws ServletException { 
     final AnnotationConfigWebApplicationContext root = new AnnotationConfigWebApplicationContext(); 
     root.setServletContext(servletContext); 
     root.scan("com.springway"); 
     root.refresh(); 

     final ServletRegistration.Dynamic servlet = servletContext.addServlet("spring", new DispatcherServlet(root)); 
     servlet.setLoadOnStartup(1); 
     servlet.addMapping("/*"); 
    } 

    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); 
    } 

registro Tomcat dice:

"ATTENZIONE: Nessun mapping trovato per richiesta HTTP con URI

[/springway/resources/css/bootstrap-responsive.css] in Dispatc herServlet con il nome 'primavera'

repertorio:

-SpringWay 
>  -src 
>   - main 
>     -webapp 
>       -resources 
          -WEB-INF 
           -welcome.ftl 
           -springway.ftl  

welcome.ftl:

[#ftl /] 
[#include "springway.ftl" /] 


<ul class="breadcrumb"> 
    <li> 
    <a href="[@spring.url '/test'/]">Test</a> <span class="divider">/</span> 
    </li> 
    <li> 
    <a href="#">Library</a> <span class="divider">/</span> 
    </li> 
    <li class="active">Data</li> 
</ul> 

springway.ftl:

[#ftl/] 
    [#import "spring.ftl" as spring /] 

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 

     <title> 

     </title> 

     <link href="[@spring.url '/resources/css/bootstrap-responsive.css'/]" rel="stylesheet" type="text/css" media="screen"/> 
     <link href="[@spring.url '/resources/css/bootstrap-responsive.min.css'/]" rel="stylesheet" type="text/css" media="screen"/> 
     <link href="[@spring.url '/resources/css/bootstrap.css'/]" rel="stylesheet" type="text/css" media="screen"/> 
     <link href="[@spring.url '/resources/css/bootstrap.min.css'/]" rel="stylesheet" type="text/css" media="screen"/> 

     <script src="[@spring.url '/resources/js/bootstrap.js'/]" type="text/javascript"></script> 
     <script src="[@spring.url '/resources/js/bootstrap.min.js'/]" type="text/javascript"></script> 
     </head> 

    <body ></body> 
    </html> 

risposta

9

Hai definito resourceLocation sbagliato .

Invece di

registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); 

che avrebbe dovuto fare

registry.addResourceHandler("/resources/**").addResourceLocations("/resources/**"); 

Perché la cartella CSS è cartella di risorse interne è necessario mettere l'extra ** dopo l'/ solo dopo che identificherà il cartella css altrimenti caricherà solo dalle cartelle delle risorse non verranno prese in considerazione le sottocartelle.

Spero che ti abbia aiutato.

Cheers.

+0

Grazie Giappone per l'assistenza. – Echo

1

Se si utilizza Primavera di sicurezza, si potrebbe considerare l'aggiunta dei webjars alla lista di richieste autorizzate con l'aggiunta di questa riga di codice al tuo SecurityConfiguration Classe:

@Configuration 
@EnableWebMvcSecurity 
public class SecurityConfiguration extends WebSecurityConfigurerAdapter { 

@Override 
protected void configure(HttpSecurity http) throws Exception { 
    http 
    .authorizeRequests() 
    .antMatchers("/resources/**", "/signup", "/about").permitAll() 
    **.antMatchers("/webjars/**").permitAll()** 
    .anyRequest().authenticated() 
    .and() 
    .formLogin().loginPage("/signin").permitAll() 
    .and() 
    .logout().permitAll(); 
} 
2

Se si utilizza Primavera di sicurezza, si potrebbe considera l'aggiunta dei webjars all'elenco delle richieste autorizzate aggiungendo questa riga di codice alla classe SecurityConfiguration:

@Configuration 
@EnableWebMvcSecurity 
public class SecurityConfiguration extends WebSecurityConfigurerAdapter { 

@Override 
protected void configure(HttpSecurity http) throws Exception { 
http 
    .authorizeRequests() 
    .antMatchers("/resources/**", "/signup", "/about").permitAll() 
    **.antMatchers("/webjars/**").permitAll()** 
    .anyRequest().authenticated() 
    .and() 
.formLogin().loginPage("/signin").permitAll() 
    .and() 
//... 
.logout().permitAll(); 
} 
Problemi correlati