java - Spring Boot 应用程序登录成功后重定向到 http URL
问题描述
我有一个具有以下安全配置的 Spring Boot 应用程序。
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
String[] csp = {"default-src 'self'",
"script-src 'self'",
"style-src 'self'",
"img-src 'self'",
"font-src 'self'",
"child-src 'self'",
"form-action 'self' ",
"frame-ancestors 'none'",
"manifest-src 'self'"
};
http
.addHeaderWriter(new StaticHeadersWriter("Content-Security-Policy", String.join(";", csp)))
.loginPage("/login")
.loginProcessingUrl("/login")
.defaultSuccessUrl("/landing");
}
}
我点击 URL https://my-app.com/login
,输入正确的用户名和密码,然后单击登录。我收到一条错误消息说
拒绝将表单数据发送到“ http://my-app.com/ ”,因为它违反了以下内容安全策略指令:“form-action 'self'”。
我不确定为什么我的应用程序重定向到 http URL 而不是 https 一个。我想将成功登录重定向到 https URL
解决方案
它与 Spring Boot 本身无关。您必须配置您的网络服务器或应用程序服务器(我想在这种情况下是嵌入式 tomcat)您能分享您的 application.properties 吗?您是否配置了 SSL?如果是的话,可以通过TomcatEmbeddedServletContainerFactory的postProcessContext方法,通过创建一个Bean来实现https重定向,如下:
TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint securityConstraint = new SecurityConstraint();
securityConstraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
securityConstraint.addCollection(collection);
context.addConstraint(securityConstraint);
}
};
推荐阅读
- django - Django保存方法没有按预期工作
- c# - UWP中的BitmapImage偶尔会显示错误的图像
- multithreading - 具有相同 cron 表达式的 Spring Boot 多个调度程序不起作用
- multithreading - Julia - 多个数据帧上的线程循环
- vue.js - Vue + Google Analytics + 存储:“无”(GDRP)
- r - 在 data.table 中使用 grepl 和 str_sub 删除部分字符串
- css - 样式不适用于 CSS 范围组件
- ios - AVAudioRecorder.pause() 在状态栏中显示红色麦克风图标
- reactjs - 如何同时提取和设置值到 Switch ?反应
- flutter - 在颤动中使用多个条件进行过滤