【发布时间】:2019-05-31 18:01:16
【问题描述】:
此问题与Disable Keycloak authentication for a specific url in spring-boot有关
我有一个第 3 方仪表板,它通过 iFrame 管理我的前端。但它直接通过它的搜索小部件调用我的搜索 api。下面提到的代码仅解决此搜索 API 的 CORS 问题并发送此错误 ,所有其他 API 都可以顺利运行。
@Override
protected void configure(@Nonnull final HttpSecurity http) throws Exception {
super.configure(http);
http.csrf().disable();
http
.cors()
.and()
.authorizeRequests()
.antMatchers("/health", "/error").permitAll()
.antMatchers(HttpMethod.OPTIONS, "/**").permitAll()
.anyRequest().authenticated();
}
现在我在控制器上添加了以下代码并开始工作:
@CrossOrigin(origins = "https://dashboard-url")
所以,
- 这是正确的方法吗?使用这个有什么陷阱吗?
- 这两个有什么区别,我以前的方法缺少什么。
- 我有 3 个阶段 (dev/stage/prod),我可能需要在其中添加此 @CrossOrigin 注释,以及如何继续的任何建议。我可以使用配置文件,但 prod 没有特定的 -prod 标签,例如dev 和 stage 具有以下 url dashboard-dev.com/dashboard-stage.com。但 prod 只有 dashboard.com。
【问题讨论】:
-
CORS 和 CSRF 是完全不同的东西。你读过关于两者的东西吗?维基百科或 Spring Security 参考?
-
我对安全的了解有点有限。您是否建议上面的 http.cors() 对上面屏幕截图中的错误没有帮助?
-
不,我不建议这样做。您遇到了 CORS 问题,并且您已经使用
http.cors()和@CrossOrigin(origins = "https://dashboard-url")解决了它。 -
所以回答我的第一个问题,这是正确的做法。这是解决此问题的唯一方法。 ?
-
是的,这是正确的方法。不,这不是唯一的方法。你也可以使用 CORS 配置而不是注解。
标签: spring-boot authentication spring-security cors keycloak