首页 > 解决方案 > 为不同的api组springboot添加多重认证机制

问题描述

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

登录页面在/login成功登录后重定向到网站的主页。

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

有没有一种方法可以让我们说/login使用默认身份验证类和/api/login使用其他一些将读取 JSON 数据并进行身份验证的自定义类。

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

标签: springspring-bootspring-securityspring-security-rest

解决方案


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

下面的片段可能会有所帮助:[来源: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 人。只是希望能有所帮助。


推荐阅读