我是Spring的新手,我正在尝试创建自己的用户并对其进行身份验证。到目前为止,一切正常,我可以登录和注销,但是无法在身份验证成功/失败处理程序中自动绑定用户存储库。我可以在其他任何地方执行此操作,例如在控制器中。
我的处理程序如下:
@Service
public class MyAuthenticationSuccessHandler extends
SavedRequestAwareAuthenticationSuccessHandler {
@Autowired
UserRepository userRepository;
@Override
public void onAuthenticationSuccess(HttpServletRequest request,
HttpServletResponse response, Authentication authentication)
throws ServletException, IOException {
[...]
User user = (User)authentication.getPrincipal();
user.setLastLogin(now);
userRepository.save(user);
[...]
}
}
当我尝试保存用户时,由于userrepository为null,我得到了一个nullpointer异常。
userrepository看起来像这样:
@Repository
public interface UserRepository extends CrudRepository<User, Long> {
Optional<User> findByName(String name);
}
但是,我可以像在Sucesshandler中尝试的方式将其自动布线到其他地方。例如在控制器中。
有人可以告诉我我在做什么错吗?
答案 0 :(得分:2)
使用此类时,我用@Component
而不是@Service
(美学)对其进行注释。
如果此时获得NPE,则是因为MyAuthenticationSuccessHandler
未被管理。您已扫描软件包或在@Bean
类中Configuration
对其进行扫描。
答案 1 :(得分:1)
您是否正在扫描包含处理程序的软件包?好像您放了@Service批注,但如果不扫描程序包,它将无用,因为spring对此一无所知。