我有一个Spring Boot Webapp,其中包含针对不同路由的一些安全性配置。该项目的一些资源如下:
问题是,尽管我可以通过模板引擎(thymeleaf)加载视图(不带样式),但所有对静态内容的请求都返回401代码。
现在,我搜索并找到了许多有关此问题的内容。这里有趣的是,没有加载js,libs和css文件,但显示的是图像。需要说明的是:即使图像在显示时也返回401代码。
我发现的一些已经问到的问题是:
我已经研究了很多春季文档
这是我的配置文件,安全性文件和登录文件,我已经对其进行了很多改动,但仍然无济于事:
@EnableWebMvc
@Configuration
@ImportResource({"classpath:mongo-config.xml"})
public class ProjectConfiguration implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler(
"/img/**",
"/css/**",
"/js/**",
"/libs/**")
.addResourceLocations(
"classpath:/static/img/",
"classpath:/static/css/",
"classpath:/static/js/",
"classpath:/static/libs/");
}
@EnableWebSecurity
@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
System.out.println("Security Config");
http .csrf().disable()
.httpBasic().disable()
.authorizeRequests()
.antMatchers("/js/**","/css/**","/img/**","/libs/**").permitAll()
.antMatchers("/userManagement", "/userManagement/**", "/rest/auth").permitAll()
.antMatchers("/admin", "/admin/**").hasRole("ADMIN")
.antMatchers("/managementSettings", "/managementSettings/**").hasRole("MANAGEMENT")
.antMatchers("/user/**").hasRole("USER")
.antMatchers("/**").hasAnyRole("USER", "DEMO", "MANAGEMENT")
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.successHandler( CustomSimpleURLAuthenticationSuccesHandler())
.failureUrl("/login?error")
.and()
.logout()
.permitAll()
.logoutRequestMatcher( new AntPathRequestMatcher("/logout"))
.logoutSuccessUrl("/login")
.and()
.addFilterAfter(AjaxRedirectFilter(), ExceptionTranslationFilter.class)
.headers()
.httpPublicKeyPinning()
.addSha256Pins("*********************","*************************")
.includeSubDomains(true)
.maxAgeInSeconds(10000);
}
@Override
public void configure(WebSecurity web) {
web
.ignoring()
.antMatchers("/js/**","/css/**","/img/**","/libs/**");
}
<div class="content">
<img style="margin:auto" class="img-responsive" th:src="@{/img/logo.png}"/>
</div>
我想指出几件事:
@ {/ img / logo.png}似乎是从视图中请求的正确端点,因为如果我在此处进行任何更改,图像将不会显示
以同样的方式,如果我更改了安全性或配置文件中的任何路由,则图像也不显示,因此那里的路由也必须正确
如果我打开浏览器开发人员工具并检查“网络”选项卡,它说:“未能加载响应数据”,但是如果双击该文件,则实际上它会以从服务器加载的纯文本格式打开js资源。 dev tools capture和plain text jQuery display
因此,话虽这么说,我如何在视图中加载所有静态文件?只要可以访问我的文件
答案 0 :(得分:0)
您必须将资产URL的安全性配置为allowAll,例如本教程https://www.baeldung.com/spring-mvc-static-resources的第五部分。我想。
答案 1 :(得分:0)
经过大量研究和尝试来解决该问题,该解决方案是删除过时的API REST代码,该代码与整个项目的安全性息息相关。
项目迁移中的典型内容