Spring 3 с конфигурацией на основе Java и проблемой доступа к ресурсам - PullRequest
6 голосов
/ 30 марта 2012

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

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

Проблема в том, что я не могу использовать эти .css со страницы freemarker. Однако я импортировал их. Поскольку я использую конфигурацию на основе 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-responseive.css] в ДиспетчерСервлет с именем 'весна'

Справочник:

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

Ответы [ 3 ]

9 голосов
/ 07 мая 2012

Вы определили неверное расположение ресурса.

Вместо

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

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

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

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

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

Приветствие.

2 голосов
/ 27 февраля 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();
} 
1 голос
/ 27 февраля 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();
} 
...