我在论坛上进行了一些搜索,但是找不到合适的内容。我最近在服务器(VPS)上发布了我的spring boot multi maven项目。一切都很好,但是当我使用Let's Encrypt通过HTTPS保护该站点后,该站点的静态内容将不被提供,而是被阻止(403)。 这是我的应用程序的结构:
app
--api
--src/main/resources/static
--business
--model
--repository
静态资源位于api maven模块的src / main / resources / static文件夹中。
我可以使用https://example-app.com/index.html
访问我的网站主页。js和其他资源在index.html的同一级别上。
在spring boot安全性的安全性配置中,我具有:
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable().exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and().authorizeRequests()
.antMatchers("/api/public/**").permitAll()
.antMatchers("/api/**").authenticated()
.anyRequest().permitAll();
http.addFilterBefore(jwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);
}
正如我所说,在https之前,我完全能够运行我的应用程序,但是现在当我访问index.html时,我在浏览器控制台中有很多403(js,图像,css,字体)。如您所见,我的安全配置非常宽松,所以我认为这不是问题所在。 我认为这是Spring Boot配置错误的选项。
更新
经过一些测试,我发现从应用程序内部调用的其余api总是以403结尾,但是如果我尝试在应用程序上下文外部(从url,邮递员...)调用它们,则它们都可以正常工作。
答案 0 :(得分:0)
这有点猜测,但让我们看看。 httpSecurity.antMatcher(/api/public/**).permitAll()
仅适用于已通过身份验证的用户。由于您使用SessionCreationPolicy.STATELESS
,因此在您的应用内调用资源时,AuthenticationContext
可能不可用。
如果您不介意将资源公开给未经身份验证的用户,则可以尝试执行以下操作:
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers(/api/public/**);
}
}