Spring boot 如何将Spring安全性与Spring引导Rest API一起使用?

Spring boot 如何将Spring安全性与Spring引导Rest API一起使用?,spring-boot,jsp,spring-security,Spring Boot,Jsp,Spring Security,我制作了一个管理员工的网络应用程序。我想把它分成两部分,分别是管理员和用户,并根据他们的角色进一步禁用用户界面中的一些功能。据我所知,Spring Security非常适合它,但我的问题是我的接口是一个项目,而API是一个独立的项目,所以我在项目中没有任何带有jsp文件的DAO等。(我使用AJAX从数据库中获取必要的信息) 在这种情况下,我如何使用Spring安全性?有更好的方法吗?目前,您的前端(webapp的用户界面)直接与数据库交互,自己进行AuthN/AuthZ。因此,为了将UI与身份验

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

在这种情况下,我如何使用Spring安全性?有更好的方法吗?

目前,您的前端(webapp的用户界面)直接与数据库交互,自己进行AuthN/AuthZ。因此,为了将UI与身份验证分离,您可以引入后端(即springboot),它将负责处理与数据库的事务。考虑到使用简单用户密码的用例,没有必要使用spring安全性,因为简单的决策逻辑可以在代码本身中执行

  • 数据库:您可以使用springboot的内存数据库,也可以继续使用当前的数据库,只要确保它有API,您的服务器就可以通过API与之交互
  • 后端(Springboot):所以它可以有两个RESTAPI端点,UI可以使用这些端点来查询有关用户的信息
  • 前端(Ajax):调用后端RESTAPI端点。 首先,它调用
    /authorize
    ,以确保客户端已通过登录身份验证。 成功后,它调用
    /user/details
    。现在,一些数据仅检索用于 基于后端过滤的管理。由于缺少一些数据,因此需要 完全显示(对于正常用户)
参考资料:

  • 目前,您的前端(webapp的用户界面)直接与数据库交互,自己进行AuthN/AuthZ。因此,为了将UI与身份验证分离,您可以引入后端(即springboot),它将负责处理与数据库的事务。考虑到使用简单用户密码的用例,没有必要使用spring安全性,因为简单的决策逻辑可以在代码本身中执行

    • 数据库:您可以使用springboot的内存数据库,也可以继续使用当前的数据库,只要确保它有API,您的服务器就可以通过API与之交互
    • 后端(Springboot):所以它可以有两个RESTAPI端点,UI可以使用这些端点来查询有关用户的信息
    • 前端(Ajax):调用后端RESTAPI端点。 首先,它调用
      /authorize
      ,以确保客户端已通过登录身份验证。 成功后,它调用
      /user/details
      。现在,一些数据仅检索用于 基于后端过滤的管理。由于缺少一些数据,因此需要 完全显示(对于正常用户)
    参考资料:


  • 那么,您的后端当前是Springboot服务器吗?如何在后端确定客户端是用户/管理员,是否使用一些authn/authz机制,如令牌或密码?或者,是否所有预期的客户端都预加载到数据库中,以便后端可以对此进行查询?基于此,我们可以让后端决定对用户进行身份验证,用户界面可以决定下一步操作。@srinivaskumar对此仍然非常陌生,因此我使用javascript(非常糟糕的做法,但我不知道其他方法)进行了所有身份验证。用户角色也在数据库中。我有一个AJAX调用来验证用户名和密码是否匹配,然后我使用用户用户名(也是他/她的id)调用另一个AJAX来获取关于该用户的所有信息。根据他们的角色,我将他们重定向到管理员/用户页面。我希望使用另一种方法来完成这一部分,而不是使用JSO。那么您的后端当前是Springboot服务器吗?如何在后端确定客户端是用户/管理员,是否使用一些authn/authz机制,如令牌或密码?或者,是否所有预期的客户端都预加载到数据库中,以便后端可以对此进行查询?基于此,我们可以让后端决定对用户进行身份验证,用户界面可以决定下一步操作。@srinivaskumar对此仍然非常陌生,因此我使用javascript(非常糟糕的做法,但我不知道其他方法)进行了所有身份验证。用户角色也在数据库中。我有一个AJAX调用来验证用户名和密码是否匹配,然后我使用用户用户名(也是他/她的id)调用另一个AJAX来获取关于该用户的所有信息。根据他们的角色,我将他们重定向到管理员/用户页面。我希望使用另一种方法来完成这部分,而不是使用JS
    @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.
        }
    }