问题标签 [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.
java - 检查禁用用户的凭据、Spring Security、UserDetailsService
我正在使用 Spring Security 5.4.2 使用 UserDetailsService 实现对用户进行身份验证。未验证其电子邮件帐户的用户将被禁用(我的 UserDetails 实现的 isEnabled() 方法返回 false)。当禁用用户尝试登录时,即使用于登录的密码不正确,我也会收到 DisabledException。我想隐藏一个帐户被不知道密码的用户禁用的事实,并且只通知那些提供良好凭据的用户他们的帐户被禁用。有没有办法在检查 isEnabled 之前检查凭据?
java - GET UserDetails 权限
我创建了一个@ManyToMany
表。一个表中的用户和另一个表中的角色。即一个用户可以有很多角色,一个角色可以有很多用户。我认为没有什么不寻常或错误的。
这就是我得到的方式roles
:
我也有UserDetails
所以我需要以某种方式将这些角色推入UserDetails
,但我做不到。
请告诉我该怎么做?
MyUserDetail.java
spring-boot - 刷新 Principal 的自定义字段不适用于 spring-session-redis
我有一个名为“CustomUserDetails”的对象,它扩展了 org.springframework.security.core.userdetails.User。那是基本的用户加上自定义字段。当我需要刷新 CustomUserDetails 的某些字段时,我会这样做:
当我调用时,在项目的另一部分
它返回“价值”。
我已经添加了 spring-session-data-redis 来处理多机环境中的会话,但是现在当我尝试做
它返回空值。
如何更新 Redis 存储库中的 CustomUserDetails 字段?
spring-security - SpringSecurity UserDetailsService REST Client
我正在使用SpringBoot 2.4.7
并且正在尝试实现 jdbc 身份验证。问题是我无法通过 http 访问后端。我已经阅读了以下配置:
我可以在我的上下文应用程序地址访问默认登录页面。但我想用和参数调用POST
登录端点。username
password
我怎样才能做到这一点?
java - 如何在数据库中正确实现验证注册?
同样的“springboot.model.User.setUsername(String)”因为“users”为null”错误不断出现。错误很清楚,它说你不能设置null。我将json数据发送到DTO类,其中我检查它是否在数据库中,如果它不存在,那么我安装。也许我犯了一个严重的错误并且没有看到它。请告诉我需要做什么,如何正确分配值?
错误:
JSON请求:
回复:
实体:
服务注册方式:
配置:
CLASS JWT 用户详细信息:
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。
spring - WebSecurityConfigurerAdapter 和 UserDetailsService 创建循环依赖
我的以下两个类正在创建循环依赖项
我相信 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 结束
spring-boot - 在spring security登录中增加额外的用户需求并处理各种异常
我是 Spring 安全新手,我已经使用 JWT 为我的应用程序实现了基本的用户登录功能。除了在登录时检查用户名和密码之外,我还想添加其他参数,例如“帐户已验证”布尔条件,但我不确定在哪里添加此要求。此外,如果“帐户已验证”条件为假,我需要返回 403 禁止响应状态消息,如果根本找不到用户名密码组合,则返回不同的响应状态消息。这是我目前拥有的代码,它正确处理现有用户的登录(不检查“帐户已验证”条件),并在找到用户时总是抛出 401。任何反馈都会有所帮助。
WebSecurityConfigurerAdapter
用户详情服务
身份验证过滤器
授权过滤器
应用用户
spring-security - Spring Cloud Gateway:组合安全?(X.509 + HTTP 标头)
我正在使用 Spring Cloud Gateway 构建 API 网关,我想保护它。
在我们当前的架构中,API 网关将隐藏在门户之后,该门户使用客户端证书(为系统用户颁发)进行身份验证,并在 HTTP 标头中发送调用服务的真实用户的名称。
我正在寻找一种方法来配置 Spring Security 以验证证书(以便其他人无法调用 GW),但同时从提供的标头构造主体(在证书检查成功后)。
如果我使用x509
Spring Security 的标准(使用提供subjectPrincipalRegex
的),用户服务只接收匹配的部分作为用户 ID,因此我可以Principal
从证书中的用户名构造(仍然相同)。
即我正在寻找这样的东西
- 没有客户端证书或无效的客户端证书 => 匿名用户(仍然可以访问某些路由)
- 有效证书 =>
UserDetails
根据 HTTP 标头获取(仍然会导致在 DB 中找不到用户,即匿名访问)。
注意:由于 Spring Cloud Gateway 是反应式的,我正在寻找适用于 Spring WebFlux 安全性的解决方案,但我相信这些概念与“标准非 WebFlux”安全性中的概念相同