Spring-Security登录使用Hibernate返回Bad Credentials

时间:2014-04-03 17:21:36

标签: spring hibernate spring-mvc spring-boot

我正试图通过hibernate和Spring-Security来开始Spring启动。我在尝试使用spring-security登录时遇到困难,并且发现很难通过一些奇怪的问题进行调试。

我的代码输入" loadUserByUsername(String login)"我打电话给#34; userDAO.getUser(登录)"。在getUser(登录)中,我打印了日志,这些日志在createQuery代码行之后没有打印,我得到了#34;错误的凭据"来自登录的UI上的消息。

以下是打印的日志: -

  

2014-04-03 22:38:54.150 INFO 4587 [tomcat-http - 6] ---   service.CustomUserDetailsS​​ervice:XXX loadUserByUsername

     

2014-04-03 22:38:54.151 INFO 4587 [tomcat-http - 6] ---   model.implementation.UserDAOImpl:XXX登录名:-admin

     

2014-04-03 22:38:54.152 INFO 4587 [tomcat-http - 6] ---   model.implementation.UserDAOImpl:XXX User Query0 2014-04-03

我无法理解为什么不打印下面的其他日志以及我的代码如何移出方法而日志中没有任何错误。

您还可以在https://github.com/himanshuvirmani/Spring-Boot-Security-Example

查看完整代码

下面的一些代码段

@Override
    public UserDetails loadUserByUsername(String login)
            throws UsernameNotFoundException {
        logger.info("XXX loadUserByUsername");
        AdminUser domainUser = userDAO.getUser(login);

        boolean enabled = true;
        boolean accountNonExpired = true;
        boolean credentialsNonExpired = true;
        boolean accountNonLocked = true;
        logger.info("XXX User name " + domainUser.getLogin());
        logger.info("XXX User Role " + domainUser.getRole().getRole());
        return new User(
                domainUser.getLogin(), 
                domainUser.getPassword(), 
                enabled, 
                accountNonExpired, 
                credentialsNonExpired, 
                accountNonLocked,
                getAuthorities(domainUser.getRole().getId())
        );
    }


public AdminUser getUser(String login) {
        logger.info("XXX Login name : -" + login);
        List<AdminUser> userList = new ArrayList<AdminUser>();
        logger.info("XXX User Query0 ");
        Query query = openSession().createQuery("from AdminUser u where u.login = :login");
        logger.info("XXX User Query1 ");
        query.setParameter("login", login);
        logger.info("XXX User Query2 : -");
        userList = query.list();        
        if (userList.size() > 0)
            return userList.get(0);
        else
            return null;    
    }

1 个答案:

答案 0 :(得分:1)

感谢所有帮助。我想出了问题,并在下面提到,以便在有人面对这个问题时可能有所帮助。

这里hibernate的createQuery方法抛出异常,但是在控制台或spring日志中没有出现相同的异常。所以你最好用try / catch捕获所有的hibernate查询语句,以便你总是意识到发生了什么不好的事情。它应该如下所示: -

public AdminUser getUser(String login) {
    List<AdminUser> userList = new ArrayList<AdminUser>();
    try {
    Query query = openSession().createQuery("FROM model.AdminUser u WHERE u.login = :login");       
    query.setParameter("login", login);
    logger.debug("XXX query : -" + query.getQueryString());
    userList = query.list();
    } catch(HibernateException e){
        logger.error("XXX Hibernate exception occured");
        e.printStackTrace();
    }