我试图让我的手在Spring启动时与休眠和Spring-Security相关。我在尝试使用spring-security进行登录时遇到困难,并且发现很难用一些奇怪的问题进行调试。使用Hibernate进行Spring-Security登录返回错误的凭证
我的代码从我称之为“userDAO.getUser(login)”的地方输入“loadUserByUsername(String login)”。在getUser(登录)我已经打印日志,这些日志在createQuery代码行之后没有打印,并且在登录界面的UI上收到“Bad credentials”消息。
以下是获得打印的日志: -
2014年4月3日22:38:54.150 INFO 4587 [Tomcat的HTTP - 6] --- service.CustomUserDetailsService:XXX loadUserByUsername
2014年4月3日22:38:54.151 INFO 4587 [Tomcat的HTTP - 6] --- model.implementation.UserDAOImpl:XXX登录名:-admin
2014年4月3日22: 38:54.152 INFO 4587 [tomcat-http - 6] --- model.implementation.UserDAOImpl :XXX用户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;
}
你确定你没有得到任何异常? HQL查询应为 'from AdminUser u where u.login =:login'。这可能会解释为什么其他日志消息不能打印。 – Michal
是的,我的坏..但改变到AdminUser也没有影响。尽管如此,它仍然只能在该查询上结束代码。我已经使用下面的logback.xml配置了Hibernate日志。我是否需要做额外的事情来查看从休眠状态中的异常等。 –