【问题标题】:Is spring session and cookies still relevant since there is spring security and JWTSpring session 和 cookies 是否仍然相关,因为有 spring security 和 JWT
【发布时间】:2018-10-11 23:51:27
【问题描述】:

几个月前我开始了一个 Spring Boot 项目,并使用带有 cookie 的 Spring JDBC 会话。该应用程序与付款有关。为了让用户进入会话,我从 HTTPRequestservelet 获取 cookie,并将其中的 ID 传递给 JDBC 会话以让用户进入会话。现在我已经阅读了关于 Spring Security 和 JWT 的内容,它似乎做了同样的事情,但是以一种更安全、更标准化的方式,加上 Bcrypt 附带 Spring Security,所以我现在的问题是因为我打算更改 JWT 和 Spring Security ,我的 JDBC 会话和 cookie 是否仍然相关?

【问题讨论】:

    标签: java spring spring-boot spring-security spring-session


    【解决方案1】:

    cookie 只是在请求和响应中从服务器发送到服务器的一小段信息,用于维护会话相关信息。只要您可以建立一种机制来存储和检索会话相关信息,您就可以始终忽略 cookie(不仅仅是在使用 JWT 时)。

    JWT 用于发送和接收身份验证和授权信息以及会话相关信息,即当用户将商品添加到购物车时,您无法更改 JWT。

    因此,除了 JWT 之外,您可能还想使用 cookie(或任何其他机制)来跟踪会话信息。

    编辑:我最近发现,在 cookie 中发送 JWT 是已知的最佳实践之一。所以现在,你拥有两全其美。

    【讨论】:

    • 那么如何使用带有 Spring Security 的会话,身份验证会在会话之前发生还是反之亦然?
    • 您在什么时间开始会话完全取决于您要达到的目标。如果您决定继续使用 cookie,您可以使用 response.addCookie(new Cookie("key", value)) 仅仅因为您使用的是 Spring Security 和 JWT,并不意味着您必须更改之前处理 cookie 的方式。它仍然可以保持不变。
    • 这就是我从请求 request.getCookies() 中获取 cookie 的方式,所以是否可以使用此 cookie 并获取用户,然后我可以在我的海关 spring 安全类覆盖配置中使用它(AuthenticationManagerBuilder builder) 方法。
    • 据我了解,您想从 cookie 中获取用户信息(用户名/密码)并进行验证。在这种情况下,您需要提供 UserDetailsService 的自定义实现,在其中创建 User 对象并将其传递给 Spring Security。在您的configure 方法中,要求AuthenticationManagerBuilder 使用您的UserDetailsService 自定义实现。 希望这能回答您的问题。
    • 好的,所以我的另一个问题是,身份验证生成器在每个受保护的 Url 上交叉引用用户名和 Bcrytpassword,这可能是一个问题,因为如果用户输入已保护的 url通过 spring security,他每次都必须被重定向到 loginForm 页面,如何解决这个问题,以便用户只使用他的用户名和密码进行一次身份验证,spring security 在整个应用程序生命周期中使用该详细信息,而无需他总是重定向到登录表单?
    猜你喜欢
    • 2015-06-11
    • 2018-01-29
    • 2016-11-07
    • 2016-07-08
    • 2018-01-26
    • 2012-01-14
    • 2016-09-22
    • 2015-07-07
    • 1970-01-01
    相关资源
    最近更新 更多