spring - 为不同的api组springboot添加多重认证机制
问题描述
我们有一个现有的 spring-boot 应用程序,它支持带有 spring-security 的基本身份验证。此应用程序使用弹簧模板,因此它接受表单数据作为输入并通过执行身份验证来保存会话。
登录页面在/login
成功登录后重定向到网站的主页。
在同一个 Spring Boot 服务中,我们希望开始支持移动应用程序使用的基于 JSON 的 API。我们正在考虑添加登录 API,/api/login
以便为移动设备提供服务。
有没有一种方法可以让我们说/login
使用默认身份验证类和/api/login
使用其他一些将读取 JSON 数据并进行身份验证的自定义类。
我们还想使用不同的页面进行未经授权的访问。因为现有的呈现自定义 HTML 页面。但是使用 API,我们希望使用 HTTP 代码发送 JSON 响应。
解决方案
不是 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 ),这将使您的生活更加轻松。
如果您还必须为移动应用程序实现基于会话的身份验证。这是你需要做的
- 在服务器上创建会话
- 将会话密钥设置为响应标头中 cookie 的一部分
- 将 cookie 存储在您的应用程序中。
- 在来自移动应用程序的后续 API 调用中,将 cookie 包含在请求标头中。
同样,不是 Java 人。只是希望能有所帮助。
推荐阅读
- django - 无法在自定义工具栏配置中将“ckeditor_wiris”插件集成到 django-ckeditor
- android - 膨胀类 androidx.media2.widget.VideoView 时出错
- html - 如何使用 css-grid 将元素放置在现有容器的顶部
- reactjs - 自定义颜色主题在 Bootstrap、React、SCSS 项目中无法正常工作
- swiftui - 来自 View 的 UIImage 与 onAppear 逻辑
- binary-search - 为什么我的使用 while 循环 dosnt 的二进制搜索有效?
- ansible - 使用 ad-hoc 命令的 Ansible 过滤器
- blockchain - " 期望 '(' 但得到标识符 " & " 解析错误:不匹配的输入 '{' 期望 {';', '='} [undefined] "
- javascript - 尝试使用现有对象中的 jsonata 创建对象
- python-sockets - TypeError: socket.bind() 只接受一个参数(给定 2 个)