gpt4 book ai didi

java - Spring Boot安全性在https之后阻止静态资源

转载 作者:行者123 更新时间:2023-12-02 06:18:18 26 4
gpt4 key购买 nike

我在论坛上搜索了一下,但没有找到合适的东西。我最近在我的服务器(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 Security 安全配置中,我有:

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、 postman ...),它们都会起作用。

最佳答案

这有点猜测,但让我们看看。 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/**);
}
}

关于java - Spring Boot安全性在https之后阻止静态资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55852322/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com