【问题标题】:Add multiple authentication mechanism for different api groups springboot为不同的api组springboot添加多重认证机制
【发布时间】:2020-07-23 10:41:09
【问题描述】:

我们有一个现有的 spring-boot 应用程序,它支持带有 spring-security 的基本身份验证。此应用程序使用 spring 模板,因此它接受表单数据作为输入并通过执行身份验证来保存会话。

登录页面位于/login,登录成功后重定向到网站首页。

在同一个 Spring Boot 服务中,我们希望开始支持移动应用程序使用的基于 JSON 的 API。 我们正在考虑在 /api/login 添加登录 API,该 API 将用于移动设备。

有没有办法可以说 /login 使用默认身份验证类,/api/login 使用其他自定义类,它将读取 JSON 数据并进行身份验证。

我们还想使用不同的页面进行未经授权的访问。因为现有的呈现自定义 HTML 页面。但是使用 API,我们希望使用 HTTP 代码发送 JSON 响应。

【问题讨论】:

    标签: spring spring-boot spring-security spring-security-rest


    【解决方案1】:

    不是 Java 人,但一般来说,这可以通过创建一个处理 /api/login 路由的不同控制器来完成。

    下面的 sn-p 可能会有所帮助: [来源:https://spring.io/guides/gs/spring-boot/]

    package com.example.springboot;
    
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    @RestController
    public class HelloController {
    
        @RequestMapping("/api/login")
        public String LoginAPI() {
            // handle your authentication logic here. 
        }
    
    }
    

    我强烈建议不要使用基于会话的身份验证。它根本不是为现代应用程序设计的。如果该选项打开,您可以升级到基于令牌的身份验证 (jwt.io),这将使您的生活更加轻松。

    如果您还必须为移动应用实施基于会话的身份验证。这是你需要做的事情

    1. 在服务器上创建会话
    2. 将会话密钥设置为响应标头中 cookie 的一部分
    3. 将 Cookie 存储在您的应用中。
    4. 在来自移动应用的后续 API 调用中,将 cookie 包含在请求标头中。

    再说一次,不是 Java 人。只是希望有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-29
      • 1970-01-01
      • 2013-09-28
      • 2016-06-09
      • 2019-12-20
      • 1970-01-01
      • 2021-12-09
      • 2023-01-27
      相关资源
      最近更新 更多