问题标签 [userdetailsservice]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
53 浏览

java - 检查禁用用户的凭据、Spring Security、UserDetailsS​​ervice

我正在使用 Spring Security 5.4.2 使用 UserDetailsS​​ervice 实现对用户进行身份验证。未验证其电子邮件帐户的用户将被禁用(我的 UserDetails 实现的 isEnabled() 方法返回 false)。当禁用用户尝试登录时,即使用于登录的密码不正确,我也会收到 DisabledException。我想隐藏一个帐户被不知道密码的用户禁用的事实,并且只通知那些提供良好凭据的用户他们的帐户被禁用。有没有办法在检查 isEnabled 之前检查凭据?

0 投票
3 回答
333 浏览

java - GET UserDetails 权限

我创建了一个@ManyToMany表。一个表中的用户和另一个表中的角色。即一个用户可以有很多角色,一个角色可以有很多用户。我认为没有什么不寻常或错误的。

这就是我得到的方式roles

我也有UserDetails

所以我需要以某种方式将这些角色推入UserDetails,但我做不到。

请告诉我该怎么做?

MyUserDetail.java

0 投票
0 回答
147 浏览

spring-boot - 刷新 Principal 的自定义字段不适用于 spring-session-redis

我有一个名为“CustomUserDetails”的对象,它扩展了 org.springframework.security.core.userdetails.User。那是基本的用户加上自定义字段。当我需要刷新 CustomUserDetails 的某些字段时,我会这样做:

当我调用时,在项目的另一部分

它返回“价值”。

我已经添加了 spring-session-data-redis 来处理多机环境中的会话,但是现在当我尝试做

它返回空值。

如何更新 Redis 存储库中的 CustomUserDetails 字段?

0 投票
1 回答
25 浏览

spring-security - SpringSecurity UserDetailsS​​ervice REST Client

我正在使用SpringBoot 2.4.7并且正在尝试实现 jdbc 身份验证。问题是我无法通过 http 访问后端。我已经阅读了以下配置:

我可以在我的上下文应用程序地址访问默认登录页面。但我想用和参数调用POST登录端点。usernamepassword

我怎样才能做到这一点?

0 投票
0 回答
36 浏览

java - 如何在数据库中正确实现验证注册?

同样的“springboot.model.User.setUsername(String)”因为“users”为null”错误不断出现。错误很清楚,它说你不能设置null。我将json数据发送到DTO类,其中我检查它是否在数据库中,如果它不存在,那么我安装。也许我犯了一个严重的错误并且没有看到它。请告诉我需要做什么,如何正确分配值?

错误:

JSON请求:

回复:

实体:

服务注册方式:

配置:

CLASS JWT 用户详细信息:

0 投票
0 回答
397 浏览

java - Spring Security Jwt:自定义 userDetails 类的 getAuthorities() 方法不返回任何值(角色)

因此,我有两种不同类型的用户,一个具有 USER 角色的 User 实体和一个具有 HOST 角色的 HOST 实体,并且角色具有相应的权限。我创建了一个实现 UserDetails 的 UserPrincipal,我在其中覆盖了该getAuthorities()方法并添加了一个 simpleGrantedAuthority。我将角色和权限创建为枚举。这是ApplicationUserPermission指定权限的枚举。

然后我ApplicationUserRole将这些权限设置为两个不同的角色:用户和主机。

然后我有UserPrincipal那个实现UserDetails并设置用户实体的权限

然后我有我的自定义UserDetailsService实现UserDetailsService

这是我的ApplicationSecurityConfig.java

这是我的JwtUsernameAndPasswordAuthFilter.java

编辑:这是我的授权过滤器

authResult.getAuthorities()返回空 []。如果我在以用户身份登录后尝试访问“/users/**”,则会返回 403 Forbidden。

0 投票
0 回答
137 浏览

spring - WebSecurityConfigurerAdapter 和 UserDetailsS​​ervice 创建循环依赖

我的以下两个类正在创建循环依赖项

我相信 passwordEncoder 是造成问题的原因,但我是 springboot 新手,所以我不确定。

这是错误正文:

应用上下文中一些bean的依赖形成了一个循环:

┌──────┐ | webSecurityConfig 定义在文件 [/Users/nacholopez/IdeaProjects/ProjectA2Back/build/classes/java/main/com/a2/backend/config/WebSecurityConfig.class] ↑ ↓ | applicationUserServiceImpl(字段私有 org.springframework.security.crypto.password.PasswordEncoder com.a2.backend.service.impl.ApplicationUserServiceImpl.passwordEncoder)└─────┘</p>

2021-09-02 21:12:48.225 错误 86761 --- [main] ostest.context.TestContextManager:在允许 TestExecutionListener [org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@395b56bb] 准备测试实例 [com .a2.backend.controller.ProjectControllerTest@62f68dff]

3.9.jar:5.3.9] 在 org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124) ~[spring-test-5.3.9.jar:5.3.9] ... 68 常见帧省略原因:org.springframework.beans.factory.UnsatisfiedDependencyException:创建名为“applicationUserServiceImpl”的bean时出错:通过字段“passwordEncoder”表示的不满足依赖关系;嵌套异常是 org.springframework.beans.factory.BeanCurrentlyInCreationException:创建名为“webSecurityConfig”的 bean 时出错:当前正在创建请求的 bean:是否存在无法解析的循环引用?在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:660) ~[spring-beans-5.3. 请求的 bean 当前正在创建中:是否存在无法解析的循环引用?在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.beforeSingletonCreation(DefaultSingletonBeanRegistry.java:355) ~[spring-beans-5.3.9.jar:5.3.9] 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry。 getSingleton(DefaultSingletonBeanRegistry.java:227) ~[spring-beans-5.3.9.jar:5.3.9] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans -5.3.9.jar:5.3.9] 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.9.jar:5.3.9] 在 org .springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:410) ~[spring-beans-5.3.9.jar:5.3.9] at org。

java.lang.IllegalStateException:无法加载 ApplicationContext

引起:org.springframework.beans.factory.UnsatisfiedDependencyException:在文件 [/Users/nacholopez/IdeaProjects/ProjectA2Back/build/classes/java/main/com/a2/backend/config/ 中定义的名称为“webSecurityConfig”的 bean 创建错误WebSecurityConfig.class]:通过构造函数参数0表示的不满足的依赖关系;嵌套异常是 org.springframework.beans.factory.UnsatisfiedDependencyException:创建名称为“applicationUserServiceImpl”的 bean 时出错:通过字段“passwordEncoder”表示的依赖关系不满足;嵌套异常是 org.springframework.beans.factory.BeanCurrentlyInCreationException:创建名为“webSecurityConfig”的 bean 时出错:当前正在创建请求的 bean:是否存在无法解析的循环引用?在 org.springframework.beans.factory.support。通过字段“passwordEncoder”表示的不满足的依赖关系;嵌套异常是 org.springframework.beans.factory.BeanCurrentlyInCreationException:创建名为“webSecurityConfig”的 bean 时出错:当前正在创建请求的 bean:是否存在无法解析的循环引用?在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:660) 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640) 在 org.springframework .beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor。请求的 bean 当前正在创建中:是否存在无法解析的循环引用?在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.beforeSingletonCreation(DefaultSingletonBeanRegistry.java:355) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:227) 在 org.springframework.beans.factory .support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) 在 org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver .java:410) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1334) 在 org.

进程以退出代码 255 结束

0 投票
1 回答
46 浏览

spring-boot - 在spring security登录中增加额外的用户需求并处理各种异常

我是 Spring 安全新手,我已经使用 JWT 为我的应用程序实现了基本的用户登录功能。除了在登录时检查用户名和密码之外,我还想添加其他参数,例如“帐户已验证”布尔条件,但我不确定在哪里添加此要求。此外,如果“帐户已验证”条件为假,我需要返回 403 禁止响应状态消息,如果根本找不到用户名密码组合,则返回不同的响应状态消息。这是我目前拥有的代码,它正确处理现有用户的登录(不检查“帐户已验证”条件),并在找到用户时总是抛出 401。任何反馈都会有所帮助。

WebSecurityConfigurerAdapter

用户详情服务

身份验证过滤器

授权过滤器

应用用户

0 投票
0 回答
12 浏览

spring-security - Spring Cloud Gateway:组合安全?(X.509 + HTTP 标头)

我正在使用 Spring Cloud Gateway 构建 API 网关,我想保护它。

在我们当前的架构中,API 网关将隐藏在门户之后,该门户使用客户端证书(为系统用户颁发)进行身份验证,并在 HTTP 标头中发送调用服务的真实用户的名称。

我正在寻找一种方法来配置 Spring Security 以验证证书(以便其他人无法调用 GW),但同时从提供的标头构造主体(在证书检查成功后)。

如果我使用x509Spring Security 的标准(使用提供subjectPrincipalRegex的),用户服务只接收匹配的部分作为用户 ID,因此我可以Principal从证书中的用户名构造(仍然相同)。

即我正在寻找这样的东西

  • 没有客户端证书或无效的客户端证书 => 匿名用户(仍然可以访问某些路由)
  • 有效证书 =>UserDetails根据 HTTP 标头获取(仍然会导致在 DB 中找不到用户,即匿名访问)。

注意:由于 Spring Cloud Gateway 是反应式的,我正在寻找适用于 Spring WebFlux 安全性的解决方案,但我相信这些概念与“标准非 WebFlux”安全性中的概念相同