首页 > 解决方案 > 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?

我使用翻译器翻译一些短语,对此感到抱歉

标签: javaspring-bootspring-security

解决方案


您的前端和后端应用程序在不同的域上提供服务,并且 HTTP cookie 信息仅针对特定域存储。因此,我认为您可以通过将 Spring Boot 应用程序放在 src/resources/static 下轻松地为您的静态页面(或单页应用程序资源)提供服务。通过这样做,您还可以限制您的前端应用程序并仅允许授权用户使用。如果你想在 firebase 上提供前端应用程序,在 Heroku 上提供后端服务,你应该通过在 firebase.json 文件中配置重写规则将其转发到上游主机(https://firebase.google.cn/docs/hosting/full -config?authuser=0#rewrites)。


推荐阅读