gpt4 book ai didi

java - 针对客户和员工的 Spring Security 用户身份验证

转载 作者:行者123 更新时间:2023-11-29 04:06:59 26 4
gpt4 key购买 nike

我是 Spring Security 的新手。我有一个包含两种不同类型实体的 Spring Boot 应用程序。客户和员工。在员工中,我有普通员工、管理员和 super 用户。由于我使用的是 JPA,每个实体都有自己的 repository。如何使用 loadUserByUsername 为我的 UserDetailsS​​ervice 建模,因为这是针对许多存储库进行验证的常用方法。围绕我的实体建模是否缺少任何东西?

附加信息:

在我的设计中,我有两个实体。 客户员工Employee 将具有 NORMALADMINSUPER_USER 等角色。客户是一个不同的实体。

是否会有两个 UserDetailsS​​ervice 和两个 AuthenticationProvider 分别指向自己的表(Customer 和 Employee)?

最佳答案

由于您的要求是拥有多个身份验证入口点,因此它不像 Atul 的回答那么简单。

你需要的是

  1. 您需要在登录时区分客户和员工。(首选方式单选按钮)

  2. 您需要实现自定义身份验证过滤器,即实现 UsernamePasswordAuthenticationFilter 而不是 spring-security 提供的默认 .formLogin()

    <
  3. 创建两个 UsernamePasswordAuthenticationToken 作为 EmployeeUsernamePasswordAuthenticationTokenCustomerUsernamePasswordAuthenticationToken

  4. 在您的自定义过滤器中,从请求中获取 userType,并根据 userType 将 authToken 设置为 empAuthToken 或 customerAuthToken 以区分所需的身份验证提供程序。

  5. AuthenticationProvider 创建为 EmployeeCustomAuthenticationProviderCustomerCustomAuthenticationProvider,其中每个 AuthenticationProvider 都应该被覆盖支持方法,其中 AuthenticationProvider支持特定 token customerAuthToken 或 employeeAuthToken。

  6. 覆盖身份验证方法,其中身份验证方法已通过身份验证参数传递,您可以从中获取用户名和密码,您可以将用户名和密码传递给任何自定义服务以对用户进行身份验证并授予用户所需的权限。

在实现您的 CustomAuthenticationFilter 时,还需要提供您的自定义 authenticationSuccessHandler 和 AuthenticationFailureHandlers。

如果你没有任何错误地实现以上所有内容,你可以避免回退身份验证,如果配置了两个 customAuthenticationProvider,则 spring-security 默认提供。

有关使用 java 配置实现多个身份验证入口点的更多详细信息,请参阅下面给出的答案 Multiple AuthenticationProvider with different UsernamePasswordAuthToken to authenticate different login forms without fallback authentication

你也可以download working code from my github repository

关于java - 针对客户和员工的 Spring Security 用户身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57935197/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com