今天开始使用SpringBoot写项目,于是先让其能够访问静态资源,但是配置半天也不能访问我的helloWorld页面,原来,在SpringBoot2.x中,一下静态资源路径不生效了。
classpath:/META/resources/,classpath:/resources/,classpath:/static/,classpath:/public/)不生效。
springboot2.x以后,支持jdk1.8,运用了jdk1.8的一些特性。jdk1.8支持在接口中添加default方法,而此方法具有具体的方法实现。静态资源和拦截器的处理,不再继承“WebMvcConfigurerAdapter”方法。而是直接实现“WebMvcConfigurer”接口。通过重写接口中的default方法,来增加额外的配置。
要想能够访问静态资源,请配置WebMvcConfigurer
1 package io.guangsoft.web.config;
2
3 import io.guangsoft.common.interceptor.EncodingInterceptor;
4 import io.guangsoft.common.security.shiro.interceptor.PermissionInterceptorAdapter;
5 import io.guangsoft.common.utils.SpringContextHolder;
6 import io.guangsoft.web.interceptor.WebInterceptor;
7 import org.springframework.context.annotation.Bean;
8 import org.springframework.context.annotation.Configuration;
9 import org.springframework.core.env.Environment;
10 import org.springframework.web.servlet.HandlerInterceptor;
11 import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
12 import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
13 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
14
15 @Configuration
16 public class InterceptorConfig implements WebMvcConfigurer {
17
18 /**
19 * 编码拦截器
20 */
21 @Bean
22 public HandlerInterceptor encodingInterceptor() {
23 EncodingInterceptor encodingInterceptor = new EncodingInterceptor();
24 return encodingInterceptor;
25 }
26
27 /**
28 * 安全验证拦截器
29 *
30 * @return
31 */
32 @Bean
33 public PermissionInterceptorAdapter permissionInterceptorAdapter() {
34 PermissionInterceptorAdapter permissionInterceptorAdapter = new PermissionInterceptorAdapter();
35 return permissionInterceptorAdapter;
36 }
37
38 /**
39 * 静态资源拦截器
40 */
41 @Bean
42 public WebInterceptor webInterceptor() {
43 WebInterceptor webInterceptor = new WebInterceptor();
44 return webInterceptor;
45 }
46
47 @Override
48 public void addInterceptors(InterceptorRegistry registry) {
49 //编码拦截器
50 registry.addInterceptor(encodingInterceptor()).addPathPatterns("/**").excludePathPatterns("/upload/**", "/static/**");
51 //安全验证拦截器
52 registry.addInterceptor(permissionInterceptorAdapter()).addPathPatterns("/**").excludePathPatterns("/upload/**", "/static/**");
53 //web拦截器
54 registry.addInterceptor(webInterceptor()).addPathPatterns("/**").excludePathPatterns("/upload/**", "/static/**");
55 }
56
57 /**
58 * 添加静态资源文件,外部可以直接访问地址
59 */
60 @Override
61 public void addResourceHandlers(ResourceHandlerRegistry registry) {
62 //第一个方法设置访问路径前缀,第二个方法设置资源路径
63 registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
64 //添加对上传文件的直接访问
65 Environment env = SpringContextHolder.getBean(Environment.class);
66 String uploadFilePath = env.getProperty("upload-file-path");
67 registry.addResourceHandler("/upload/**").addResourceLocations("file:" + uploadFilePath);
68 }
69
70 }