2014-04-03 1 views
0

최대 절전 모드와 Spring 보안을 사용하여 스프링 부팅을 시도하고 있습니다. 스프링 보안을 사용하여 로그인을 시도하는 동안 막혀서 이상한 문제로 디버깅하기가 어려웠습니다.Hibernate를 통한 Spring 보안 로그인이 나쁜 인증서를 반환합니다.

내 코드는 "userDAO.getUser (login)"에서 "loadUserByUsername (String login)"을 입력합니다. getUser (로그인)에서는의 createQuery 코드 행 이후에 인쇄되지 않는 로그 인 을 인쇄했으며 로그인시 UI에 "Bad credentials"메시지가 표시됩니다. 다음은

가 인쇄되는 로그입니다 : -

2014년 4월 3일 22 : 38 : 54.150 INFO 4587 [바람둥이-HTTP - 6] --- service.CustomUserDetailsService : XXX loadUserByUsername

2014년 4월 3일 22 : 38 : INFO 4587 54.151 [바람둥이-HTTP - 6] --- model.implementation.UserDAOImpl : XXX 로그인 이름 :

2014년 4월 3일 22 -admin : 38 : 54.152 INFO 4587 [tomcat-http-6] --- model.implementation.UserDAOImpl : XXX User Query0 2014-04-03

아래의 다른 로그가 인쇄되지 않는 이유와 내 코드가 로그에 오류없이 어떻게 이동하는지 이해할 수 없습니다.

는 또한 모든 도움을

@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;  
    } 
+0

정말 예외가 있습니까? HQL 쿼리는 'AdminUser u에서 u.login = : login'으로 변경해야합니다. 왜 다른 로그 메시지가 인쇄되지 않는지 설명 할 수 있습니다. – Michal

+0

그래, 나쁘다.하지만 AdminUser로 변경해도 아무런 영향이 없다. 그래도 코드 끝은 해당 쿼리에서만 이어집니다. 아래처럼 logback.xml을 사용하여 Hibernate 로그를 설정했다. 최대 절전 모드에서 예외를 확인하려면 추가 작업이 필요합니까? –

+0

\t \t

답변

1

감사합니다 아래 https://github.com/himanshuvirmani/Spring-Boot-Security-Example

일부 코드 조각에서 전체 코드를 확인할 수 있습니다. 누군가가이 문제에 직면하면 도움이 될 수 있도록 아래에서 문제를 파악하고 언급합니다.

여기서 hibernate의 createQuery 메소드는 예외를 던지지만 같은 예외는 콘솔이나 스프링 로그에는 나타나지 않는다. 따라서 try/catch를 사용하여 모든 최대 절전 쿼리 문을 잡아서 나쁜 상황이 발생했는지 항상 알 수 있도록하는 것이 바람직합니다. 다음과 같아야합니다. -

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(); 
    } 
관련 문제