【问题标题】:Spring Boot Security with custom auth & session storage具有自定义身份验证和会话存储的 Spring Boot Security
【发布时间】:2021-03-13 09:21:44
【问题描述】:

我正在为单页应用程序 Vue 尝试简单的 Spring Boot 应用程序,其中 Web 服务器应该回答所有 /api/auth/login/auth/logout 请求而没有任何视图,只是 JSON 响应,比如REST API。

为了简单起见,我想要一个用户名和密码验证,但由 Vue 前端调用。当我使用.formLogin() 时,Spring Security 会使用JSESSIONID 创建一个 cookie,但它可能在内存中。

对不起,如果问题不合适,但我总是发现相互矛盾的方法,并且由于我缺乏知识而很快迷失了方向:

  1. 是否需要 Spring Session,或者如何扩展它以存储在我拥有的自定义存储库中?
  2. formLogin() 是正确的选择,还是我应该使用其他东西?

【问题讨论】:

  • 让我们看看你的后端代码,尤其是你的安全配置文件

标签: java spring-boot


【解决方案1】:
  1. Spring Session 依赖(org.springframework.session:spring-session-core)不需要手动添加到类路径,因为它是由 Spring Security 完成的。但是,如果您想自定义会话管理,例如更改内存中的默认 SessionRepository 类或会话 cookie 名称,则应该添加它。
  2. formLogin 是正确的选择之一,但您需要配置它以替换默认的 spring 安全行为。就像在getting started guide 中一样,配置HttpSecurity bean 以使用您的/auth/login/auth/logout 值更改默认的/login/logout 端点路径。您可能还想在此 bean 中配置其他内容,例如在 exceptionHandling 配置中添加 authenticationEntryPoint,以便 API 服务器响应 401 http 状态而不是重定向到登录页面。

【讨论】:

  • 感谢您的回答。是否有任何替代 formLogin 具有自定义 JSON POST 正文,而不是 x-form-encoded?
  • 我怀疑是否有一个标准解决方案可以接受来自 json 正文的凭据。我能想到的 spring-security 中最接近的东西是 httpBasic,因此您可以将任何 api 请求作为 json 正文发送,并且请求使用 Authorization 标头进行授权,该标头存储用户的凭据。如果您需要在请求正文中以 json 形式发送凭据以对用户进行身份验证,那么您可能必须自己实现它
猜你喜欢
  • 2020-12-05
  • 2021-04-21
  • 2012-10-25
  • 2014-04-20
  • 2014-12-13
  • 2016-09-05
  • 1970-01-01
  • 2016-06-09
  • 2016-08-05
相关资源
最近更新 更多