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

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

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

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

Конфигурация веб-приложения:

@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] в DispatcherServlet с именем «весна»

Каталог:

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

Добро пожаловать.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>

person Echo    schedule 30.03.2012    source источник


Ответы (3)


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

Вместо

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

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

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

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

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

Ваше здоровье.

person Japan Trivedi    schedule 07.05.2012
comment
Спасибо Японии за вашу помощь. - person Echo; 07.05.2012

Если вы используете 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();
} 
person Jules0707    schedule 27.02.2014

Если вы используете 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();
} 
person jules martel    schedule 27.02.2014