Spring Boot Security默认会拦截所有请求,包括静态资源文件。这样会导致我们在访问静态资源时收到403(Forbidden)错误的响应。下面将介绍解决这个问题的方法。
第一种解决方法
第一种解决方法是在配置类上添加注解,忽略静态资源的拦截。
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/css/**", "/js/**");
}
}
上述配置类中,使用了WebSecurity
类的ignoring()
方法来忽略指定的静态资源。在antMatchers()
方法中,添加了需要忽略的静态资源路径。在上面的示例中,我们忽略了/css/**
和/js/**
路径下的所有静态资源。
第二种解决方法
第二种解决方法是实现WebMvcConfigurer
接口并覆盖addResourceHandlers()
方法。
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/css/**", "/js/**").addResourceLocations("classpath:/static/css/", "classpath:/static/js/");
}
}
上述配置类中,我们实现了WebMvcConfigurer
接口并覆盖了addResourceHandlers()
方法。在addResourceHandlers()
方法中,使用ResourceHandlerRegistry
类的addResourceHandler()
方法来指定要处理的静态资源路径,使用addResourceLocations()
方法来指定静态资源文件所在的目录。
在上面的示例中,我们添加了/css/**
和/js/**
路径下的所有静态资源,并指定了它们所在的文件夹为classpath:/static/css/
和classpath:/static/js/
。
示例说明
示例1
假设我们的Web应用中包含了以下目录结构:
src/main/resources/static/css/style.css
src/main/resources/static/js/app.js
src/main/resources/templates/home.html
在没有采用上述两种方法时,我们访问home.html
页面时,页面中引用的静态资源style.css
和app.js
会得到403(Forbidden)错误的响应。
采用第一种解决方法后,style.css
和app.js
文件会被忽略,成功加载。采用第二种解决方法后,同样可以成功加载。
示例2
假设我们的Web应用中只包含了如下结构的目录:
src/main/resources/static/js/app.js
在没有采用上述两种方法时,我们访问app.js
文件时依然会收到403(Forbidden)错误的响应。
采用第一种解决方法后,app.js
文件被忽略,可以成功加载。采用第二种解决方法后,同样可以成功加载。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Boot security 默认拦截静态资源的解决方法 - Python技术站