2012-03-30 1 views
6

Я использую Spring 3, основанную на Java, с BootStrap.Spring 3, с конфигурацией на основе Java и проблемой доступа к ресурсам

Я загрузил загрузчик и поместил css и js в каталог ресурсов.

Проблема, что я не могу использовать эти .css изнутри страницы freemarker. Howeve, что я импортировал их. Как я использую конфигурацию Java на основе, я добавил "addResourceHandler" следующим образом:

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 журнала говорит:

«ВНИМАНИЕ: отображение не найдено запрос HTTP с URI

[/springway/resources/css/bootstrap-responsive.css] в Dispatc herServlet с именем 'весна'

Каталог:

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

ответ

9

Вы определили неправильно resourceLocation ,

Вместо

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

вы должны сделать

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

Поскольку папка КСС папку внутри ресурсов, которые нужно поставить дополнительные ** после того, как/только после того, что он будет идентифицировать css, иначе он будет загружаться только из папок ресурсов, никакие подпапки не будут рассмотрены.

Надеюсь, это помогло вам.

Cheers.

+0

Спасибо, Япония за вашу помощь. – Echo

1

Если вы используете Spring Security, вы можете рассмотреть вопрос о включении webjars в список разрешенных запросов, добавив следующую строку кода в 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(); 
} 
2

Если вы используете Spring Security, вы можете рассмотрите возможность добавления веб-адресов в список авторизованных запросов, добавив эту строку кода в свой класс 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(); 
} 
Смежные вопросы