首页 > 解决方案 > 如何将 Spring Security 与 Spring Boot Rest API 一起使用?

问题描述

我制作了一个管理员工的网络应用程序。我想把它分成两部分,管理员和用户,并根据他们的角色进一步禁用用户界面中的一些功能。根据我的阅读,Spring Security 非常适合它,但我的问题是我的接口是一个项目,而 API 是一个单独的项目,所以我在项目中没有任何带有 jsp 文件的 daos 等。(我使用 AJAX 从数据库中获取必要的信息)

在这种情况下如何使用 Spring Security,有没有更好的方法呢?

标签: spring-bootjspspring-security

解决方案


目前,您的前端(webapp 的用户界面)直接与数据库交互,自行执行 AuthN/AuthZ。因此,为了将 UI 与身份验证分离,您可以引入一个后端(即 springboot),该后端将依次处理与数据库的事务。考虑到使用简单用户密码的用例,不需要弹簧安全性,因为可以在代码本身中采用简单的决策逻辑。

  • 数据库:您可以使用 springboot JPA的内存数据库,也可以坚持使用当前数据库,只要确保它具有 API,您的服务器可以通过这些 API 与之交互。
  • 后端(Springboot):所以这可以有几个 REST API 端点,UI 可以使用这些端点来查询用户。
@RestController
public class CustomRestController() {
  
    //Can be a post method, get is an exmaple.
    @GetMapping("/authorize")
    public boolean authorize(...) {
       //Queries database and returns boolean based on match/unmatch.
    }

    @GetMapping("/user/details")
    public UserDetails getUserDetailsForUserId(...) {
      //UserDetails is a custom user object which you populate by querying 
        database.
      //you can choose which details to send/not to send based on type of user.
    }
}
  • FrontEnd(Ajax):调用后端 rest api 端点。首先,它调用/authorize以确保客户端经过身份验证才能登录。成功后它会调用/user/details. 现在基于后端过滤仅为管理员检索一些数据。由于缺少某些数据,因此根本需要显示(在普通用户的情况下)

参考:

  1. Spring Restful 服务
  2. 另一个关于休息和弹簧的教程

推荐阅读