(2021/05/11)解决spring security运行时authenticationManager 注入失败的问题

本文介绍了如何解决Spring Security中authenticationManager注入失败的问题。通过创建额外的配置类,并适当使用@Order注解,最终解决了该问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

刚开始接触security,遇到了authenticationManager 注入失败的问题,在百度找了很多方法无非就是重写authenticationManagerBean(),可是我刚开始也是重写了的,但还是不能解决
第一个配置类

后来我写多了一个配置类,第二个配置类不需要@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)这个注解,同时要加上@Order这个注解。最后记得把第一个配置类的重写删掉就完成了。
第二个配置类

### 实现自定义 `AuthenticationManager` 进行身份验证 为了在 Spring Security 中实现自定义的 `AuthenticationManager` 来处理身份验证请求,通常有两种主要方法: #### 方法一:通过覆盖默认的身份验证提供者 可以通过重写 `configure(AuthenticationManagerBuilder auth)` 方法来指定自定义的 `UserDetailsService` 和密码编码器。这允许应用程序根据特定需求定制用户认证逻辑。 ```java @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(customUserDetailsService).passwordEncoder(passwordEncoder()); } ``` 这段代码指定了一个名为 `customUserDetailsService` 的服务用于加载用户详情,并设置了相应的密码加密算法[^3]。 #### 方法二:创建并注册自定义 `AuthenticationProvider` 另一种更灵活的方式是开发自己的 `AuthenticationProvider` 类,在其中编写具体的认证业务逻辑。之后再将其注入到安全配置类中作为依赖项之一。 ```java @Bean public AuthenticationProvider customAuthProvider() { DaoAuthenticationProvider provider = new DaoAuthenticationProvider(); provider.setUserDetailsService(userDetailsService); provider.setPasswordEncoder(passwordEncoder()); return provider; } @Override protected void configure(AuthenticationManagerBuilder auth) { auth.authenticationProvider(customAuthProvider()); } ``` 这种方式提供了更大的灵活性,因为可以直接控制整个认证流程而不必局限于现有的框架组件[^2]。 无论采用哪种方案,都需要确保所使用的 `PasswordEncoder` 能够正确匹配存储于数据库中的哈希值形式;同也要注意保护好敏感信息的安全传输与保存措施。 对于希望进一步扩展功能或者完全替换内置机制的情况,则可能还需要考虑继承 `AbstractAuthenticationToken` 或其他相关抽象类来自定义令牌对象,以及调整全局的安全策略设置等高级话题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值