java - Spring Security 会话域
问题描述
我和我的朋友正在为大学实践制作一个 Java Spring Boot 应用程序。它的前端在 Firebase,API 在 Heroku
问题如下,我配置Spring Security如下:
@Override
protected void configure(final HttpSecurity http) throws Exception {
http.cors().and().csrf().disable()
.authorizeRequests()
.antMatchers("/admin/**", "/bid/getBids", "/bid/{id}", "/purchase/create",
"/purchase/{id}", "/purchase/question/{questionId}/answer").hasAuthority("ROLE_ADMIN")
.antMatchers("/registration/**", "/registration").permitAll()
.anyRequest().authenticated()
.and()
.httpBasic()
.and()
.formLogin()
.permitAll()
.and()
.logout()
.logoutSuccessUrl("/").deleteCookies("JSESSIONID")
.invalidateHttpSession(true);
}
当我通过 swagger/postman 在 Heroku 上测试 API 时,一切正常,包括角色限制。
但是当它尝试通过 /login 路径设置授权时,它会重定向到 swagger-ui 页面,因为这就是我设置它的方式。我重写了重定向到它在 Firebase 上的主页,但会话不能以这种方式工作,显然是因为 cookie 保存到我在 Heroku 上的应用程序的地址。
请告诉我如何配置 Spring Security 以便其站点在授权期间保存用户会话,并且该站点可以正常使用我的 API?
我使用翻译器翻译一些短语,对此感到抱歉
解决方案
您的前端和后端应用程序在不同的域上提供服务,并且 HTTP cookie 信息仅针对特定域存储。因此,我认为您可以通过将 Spring Boot 应用程序放在 src/resources/static 下轻松地为您的静态页面(或单页应用程序资源)提供服务。通过这样做,您还可以限制您的前端应用程序并仅允许授权用户使用。如果你想在 firebase 上提供前端应用程序,在 Heroku 上提供后端服务,你应该通过在 firebase.json 文件中配置重写规则将其转发到上游主机(https://firebase.google.cn/docs/hosting/full -config?authuser=0#rewrites)。
推荐阅读
- python - pylint no such file or directory
- java - ElasticSearch 数量与 2 个字段 Java API 的相关性
- c++ - 如何检测 C 代码(需要'extern C')是否在 C++ 中编译
- javascript - 在 React State 中存储 JSX 元素?
- angular - 由于解析错误,无法加载 Angular 材质 svg 图标
- powershell - 将文件路径附加到包含文件名的 csv 文件
- java - 如何在 Spring 应用程序中使用依赖注入访问私有方法?
- laravel - 我可以使用内存数据库启动我的 Laravel 服务器吗?
- react-native - React Navigation 底部标签栏 backPress 处理
- c# - 正则表达式获取不包括模式的匹配项