1.springSecurity4+springboot 默认不拦截的静态资源路径,见SpringBootWebSecurityConfiguration
private static List<String> DEFAULT_IGNORED = Arrays.asList("/css/**", "/js/**","/images/**", "/webjars/**", "/**/favicon.ico");
如何自定义配置?
见SecurityProperties的ignored属性,在 application.properties配置
security.ignored=/css/**, /js/**,/images/**, /webjars/**, /**/favicon.ico,/Hplus4.1/**,/assets/**
备注:application.properties的属性配置项和 *Properties结尾的类有对应关系;
SecurityProperties类上的注解 @ConfigurationProperties(prefix = "security"),表示该类的成员变量和application.properties文件中security开头的属性一一对应
2.哪些目录下的文件可以直接映射为静态资源文件(静态资源文件指的是css,img,js等前端文件)
见ResourceProperties 中的默认配置
SERVLET_RESOURCE_LOCATIONS = { "/" };
CLASSPATH_RESOURCE_LOCATIONS = {"classpath:/META-INF/resources/", "classpath:/resources/",
"classpath:/static/", "classpath:/public/" };
自定义配置修改application.properties的spring.resources.staticLocations属性。
3.springmvc如何将classpath目录下的静态资源文件映射成静态资源Url?
a.见ResourceHttpRequestHandler 的handleRequest 方法:首先获取Resource的InputStream,然后使用response输出。
b.获取Resource的InputStream的调用使用了责任链模式,见DefaultResourceResolverChain 的resolveResource 方法;本质上是调用ResourceResolver的实现类PathResourceResolver的resolveResourceInternal方法,并传入locations参数。
c.List<? extends Resource> locations参数对应的就是spring.resources.staticLocations中配置的内容。
其他相关类见:WebMvcAutoConfiguration WebMvcConfigurationSupport ResourceChainRegistration ResourceHandlerRegistration
源码地址:https://gitee.com/json20080301/spring-boot-spring-security-thymeleaf
配置见application.properties