如何将 Spring Security 与 Spring Boot Rest API 一起使用?

Posted

技术标签:

【中文标题】如何将 Spring Security 与 Spring Boot Rest API 一起使用?【英文标题】:How can I use Spring Security along with a Spring Boot Rest API? 【发布时间】:2020-11-02 10:27:53 【问题描述】:

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

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

【问题讨论】:

那么您的后端目前是 Springboot 服务器吗?您如何在后端确定客户端是用户/管理员,您是否使用一些 authn/authz 机制,如令牌或密码?还是所有预期的客户端都预加载在数据库中,以便后端可以查询?基于此,我们可以让后端做出对用户进行身份验证的决定,而 UI 可以确定下一个操作。 @srinivaskumar 所以还是很新,所以我使用 javascript 进行了所有身份验证(非常糟糕的做法,但我不知道另一种方式)用户角色也在数据库中。我有一个 AJAX 调用来验证用户名和密码是否匹配,然后我使用用户名(也是他/她的 id)调用另一个 AJAX 来获取有关该用户的所有信息。从那里我根据他们的角色将他们重定向到管理员/用户页面。我希望使用另一种方法而不是使用 JS 来完成这部分 【参考方案1】:

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

数据库:您可以使用 springboot JPA 的内存数据库,也可以坚持使用当前数据库,只要确保它有 API 可以让您的服务器与之交互。 Backend(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。现在检索一些数据仅用于 基于后端过滤的管理员。由于缺少某些数据,因此需要 完全显示(在普通用户的情况下)

参考资料:

    Spring Restful services Another Tutorial on rest and spring

【讨论】:

以上是关于如何将 Spring Security 与 Spring Boot Rest API 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security:如何将两个应用程序与单独的 Spring Security 配置集成?

Spring Security(10)——退出登录logout

Spring Security + Keycloak 授权:如何将端点与资源相关联?

Spring:使用Spring Security配置执行器端点的安全性

Spring Security 如果是404直接报错,不要跳转认证?

如何将 Spring Security 与 Spring Boot Rest API 一起使用?