为了账号安全,请及时绑定邮箱和手机立即绑定

身份验证处理程序中的 Spring 自动装配

身份验证处理程序中的 Spring 自动装配

有只小跳蛙 2021-06-21 12:15:11
我是 spring 的新手,我正在尝试创建自己的用户并对其进行身份验证。到目前为止一切正常,我可以登录和注销,但我无法在身份验证成功/失败处理程序中自动连接我的用户存储库。我可以在其他任何地方执行此操作,例如在控制器中。我的处理程序看起来像这样:@Servicepublic class MyAuthenticationSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler {@AutowiredUserRepository userRepository;@Overridepublic void onAuthenticationSuccess(HttpServletRequest request,                                    HttpServletResponse response, Authentication authentication)        throws ServletException, IOException {    [...]    User user = (User)authentication.getPrincipal();    user.setLastLogin(now);    userRepository.save(user);    [...]}}当我试图保存用户时,我得到一个空指针异常,因为 userrepository 为空。用户存储库如下所示:@Repositorypublic interface UserRepository extends CrudRepository<User, Long> {Optional<User> findByName(String name);}但是,我可以像在 sucesshandler 中尝试的那样在其他任何地方自动装配它。例如在控制器中。有人能告诉我我做错了什么吗?
查看完整描述

2 回答

?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

当我使用这样的类时,我用@Component而不是@Service(美学)来注释它。

如果您在那时获得 NPE,那是因为MyAuthenticationSuccessHandler没有得到管理。您要么扫描包裹,要么@BeanConfiguration课堂上扫描它。


查看完整回答
反对 回复 2021-06-23
?
炎炎设计

TA贡献1808条经验 获得超4个赞

您是否正在扫描包含您的处理程序的包裹?看起来你放了@Service 注释,但如果你不扫描包,它将毫无用处,因为 spring 不会知道它。


查看完整回答
反对 回复 2021-06-23
  • 2 回答
  • 0 关注
  • 117 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信