如何在Spring Boot中处理最基本的用户身份验证?

时间:2018-02-17 07:45:55

标签: spring spring-boot spring-security

我之前实现了非常基本的用户身份验证 - 登录时生成会话cookie,当用户加载带身份验证的页面时,只需检查cookie。

但是,Spring Security / Apache Shiro的复杂性让我很困惑。

我真正想要的是:

  • 能够让用户登录一次并在他们访问的每个页面上看到他们的用户名(例如在Stackoverflow上)
  • 让此登录持续合理的长度(cookie到期时间或类似的时间)

看起来我可以选择使用EhCache或实现我自己的子类...某些东西......使用像postgres这样的东西。

我似乎已经得到了我想在Apache Shiro工作的第一件事:

    Subject sub = SecurityUtils.getSubject();
    UsernamePasswordToken token = new UsernamePasswordToken(username, password);
    token.setRememberMe(remember);
    try {
        sub.login(token);
        // ...

但我非常坚持如何让这个会话在重新启动spring webserver之间保持不变。就像,我知道Stackoverflow强烈推荐一个代码示例,但我甚至不知道从哪里开始。现在我试图弄清楚如何在重新启动之间保持会话(粗体以澄清我要问的内容)的“进展”实际上是单行

    DefaultWebSecurityManager dwsm = new DefaultWebSecurityManager();
    // ...
    dwsm.setCacheManager(new EhCacheManager());

我甚至不知道实际上做了什么。

我真的很感激这里的任何指导,因为我甚至不知道从哪里开始,遗憾的是,我能找到的文件并不是非常彻底。

1 个答案:

答案 0 :(得分:2)

这就是会议的问题之一。除非您保存会话,否则它们不会重新启动。

现在人们通常使用基于令牌的方法,如oauth2。

基于令牌的身份验证系统中的流程为:

  • 用户将他/她的凭据发送到授权服务器(oauth2)。
  • 如果凭据正确,则会返回令牌
  • 客户端(网页)向后端发出请求以获取用户对象,并在此调用中提供令牌作为"授权" -header。
  • 后端获取令牌并将其发送到授权服务器(oauth2)以检查其有效性。
    • 如果令牌有效,后端服务器将获取用户对象并将其发送给客户端。
    • 客户端从用户对象获取用户名并将其存储在其状态(如果是这样的应用程序,则为react,redux)。在每次调用后端时,客户端必须提供从第一次登录时获得的令牌,以便服务器始终知道呼叫者是他/她声称的那个人