身份验证处理程序中的Spring Autowire

时间:2018-08-02 08:01:52

标签: java spring authentication autowired

我是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中尝试的方式将其自动布线到其他地方。例如在控制器中。

有人可以告诉我我在做什么错吗?

2 个答案:

答案 0 :(得分:2)

使用此类时,我用@Component而不是@Service(美学)对其进行注释。

如果此时获得NPE,则是因为MyAuthenticationSuccessHandler未被管理。您已扫描软件包或在@Bean类中Configuration对其进行扫描。

答案 1 :(得分:1)

您是否正在扫描包含处理程序的软件包?好像您放了@Service批注,但如果不扫描程序包,它将无用,因为spring对此一无所知。