2012-03-30 13 views
6

Używam konfiguracji Spring 3, java, z BootStrap.Spring 3, z konfiguracją opartą na Javie i problemem dostępu do zasobów

Pobrałem bootstrap i umieścić CSS i JS w katalogu zasobów.

Emisja że cann't używać tych .css z poziomu strony freemarker. Jakkolwiek je zaimportowałem. Ponieważ używam konfigurację opartą na technologii Java, dodałem "addResourceHandler" w następujący sposób:

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/"); 
    } 

Tomcat log mówi:

„UWAGA: Nie mapowanie znaleziono URI żądania HTTP

[/springway/resources/css/bootstrap-responsive.css] w Dispatc herServlet o nazwie 'wiosnę'

katalog:

-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> 

Odpowiedz

9

Zdefiniowano źle resourceLocation .

Zamiast

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

należy zrobić

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

Ponieważ folder css jest wewnątrz folderu zasobów należy umieścić dodatkowy ** po/dopiero potem będzie zidentyfikować css folder w przeciwnym razie będzie ładował tylko z folderów zasobów nie będzie brany pod uwagę podfoldery.

Mam nadzieję, że ci pomogło.

Pozdrawiam.

+0

Dzięki Japonii za pomoc. – Echo

1

Jeśli używasz Wiosna Security, można rozważyć dodanie webjars do listy autoryzowanych żądań przez dodanie tej linii kodu do SecurityConfiguration Klasa:

@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

Jeśli używasz Wiosna zabezpieczeń, może rozważ dodanie informacji o sieci do listy autoryzowanych żądań, dodając ten wiersz kodu do klasy 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(); 
} 
Powiązane problemy