2017-09-01 55 views
0

我在使用Spring Boot提供静态内容时遇到问题。弹簧引导静态内容

我使用的默认配置位置是:src/main/resources/static/csssrc/main/resources/static/js

当页面加载时,我得到所有静态内容的404。我甚至在我的安全设置中添加了permitAll

@Override 
protected void configure(HttpSecurity http) throws Exception { 
    http 
    .authorizeRequests()  
     .antMatchers("/css/**","/js/**").permitAll() 
     .antMatchers("/services/**").hasRole("PREAUTH_USER") 
     .antMatchers("/", "/dashboard").permitAll() 
     .anyRequest().authenticated() 
    .and() 
     .formLogin().loginPage("/login") 
     .permitAll() 
    .and() 
     .logout() 
     .permitAll(); 
} 

我的资源处理程序:

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

...当我打我的login CSS是returing一个404http://localhost:8080/login

这里是响应头:

Request URL:http://localhost:8080/css/preauth.css 
Request Method:GET 
Status Code:404 
Remote Address:[::1]:8080 
Referrer Policy:no-referrer-when-downgrade 
Response Headers 
view source 
Cache-Control:no-cache, no-store, max-age=0, must-revalidate 
Content-Type:application/json;charset=UTF-8 
Date:Fri, 01 Sep 2017 17:04:59 GMT 
Expires:0 
Pragma:no-cache 
Transfer-Encoding:chunked 
X-Content-Type-Options:nosniff 
X-Frame-Options:DENY 
X-XSS-Protection:1; mode=block 
Request Headers 
view source 
Accept:text/css,*/*;q=0.1 
Accept-Encoding:gzip, deflate, br 
Accept-Language:en-US,en;q=0.8 
Connection:keep-alive 
Cookie:JSESSIONID=D1399529A7AD61D0FA67ECF0343D3A03 
Host:localhost:8080 
Referer:http://localhost:8080/login 
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36 
+0

您是否将它作为jar运行? – harshavmb

+0

如果您使用的是默认资源文件夹,则不需要配置addresource处理程序。您可以将其删除并重试。 SpringBoot将配置静态文件夹并设置资源消耗 –

+0

也访问https://spring.io/blog/2013/12/19/serving-static-web-content-with-spring-boot查看如何配置资源处理程序。 –

回答

0

这个问题似乎是在我扩展WebMvcConfigurationSupport时我的appConfig类(我需要配置messageconverters),WebMvcAutoConfiguration被禁用。所以,我不得不添加

private static final String[] CLASSPATH_RESOURCE_LOCATIONS = { 
     "classpath:/META-INF/resources/", "classpath:/resources/", 
     "classpath:/static/", "classpath:/public/" }; 

而且

@Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
if (!registry.hasMappingForPattern("/webjars/**")) { 
    registry.addResourceHandler("/webjars/**").addResourceLocations(
      "classpath:/META-INF/resources/webjars/"); 
} 
if (!registry.hasMappingForPattern("/**")) { 
    registry.addResourceHandler("/**").addResourceLocations(
      CLASSPATH_RESOURCE_LOCATIONS); 
} 

编辑: 不需要上面的代码。我改变了我的配置类来扩展WebMvcConfigurerAdapter,并且上述更改不是必需的。请参阅下面的@AndyWilkinson注释

+0

你为什么要扩展'WebMvcConfigurationSupport'?在Spring Boot应用程序中这是一件很不寻常的事情。推荐的方法是扩展'WebMvcConfigurerAdapter'。这使您可以自定义Spring MVC的自动配置,同时还可以保持Spring Boot的默认设置。 –

+0

@AndyWilkinson,谢谢安迪你是正确的..我修改了我的代码,一切工作正常,我最初预期 –