2014-10-03 37 views
1

我正在使用Spring安全性進行登錄。我有User.java其中包含用戶的詳細信息。如何將用戶標識從一張表傳遞到另一張表使用休眠狀態的春天mvc

@Entity(name = "user_table") 
//@Table(name = "user_table") 
public class User { 

    @Id 
    @Column(name = "id") 
    private String userId; 

    @Column(name = "email" ,unique = true) 
    private String userEmail; 

    @Column(name = "password") 
    private String userPassword;  

    //getter and setters 
} 

我通過使用spring安全性從表中獲取當前用戶的全部數據。這是代碼:

public User findUserByEmail(String email) { 

     List<User> users = new ArrayList<User>(); 
     try{ 
      users = sessionFactory.getCurrentSession().createQuery("from user_table where email= ?").setParameter(0, email).list(); 

      System.out.println("user is " +users); 
     }catch(Exception e){ 
       System.out.println(e.getMessage()); 
       e.printStackTrace(); 
     } 

     if (users.size() > 0) { 
      return users.get(0); 
     } else { 
       return null; 
     } 
    } 



    @Override 
    public User getCurrentUser() { 

      Authentication auth = SecurityContextHolder.getContext() 
          .getAuthentication(); 
      User currentUser = new User(); 
      if (!(auth instanceof AnonymousAuthenticationToken)) { 
        UserDetails userDetails = (UserDetails) auth.getPrincipal(); 
        System.out.println("User has authorities: " 
            + userDetails.getAuthorities()); 
        System.out.println("USERNAME:: "+userDetails.getUsername()); 
        currentUser = findUserByEmail(userDetails 
            .getUsername()); 
        System.out.println("currentUser "+currentUser); 
        System.out.println("currentUser "+currentUser.getUserId()); 

        return currentUser; 
      } 
      return null; 
    } 

我想是要發送的我是從currentUser.getUserId()得到一些其他方法的用戶ID。在該方法中,我將映射到其他表,如user_detail表,其中id是主鍵。通過發送id,我將得到user_table中不存在的其他user_details。

這是我UserDetail

@Entity(name = "user_detail") 
@Table(name = "user_detail") 
public class UserDetail { 

    @Id 
    @GeneratedValue 
    @Column(name = "id") 
    private String userId; 

    //some other details like Address . 
    //getter and setter. 
} 

從控制器我打電話這樣的上述方法:

UserService userService = new UserService(); 
User user=userDao.getCurrentUser(); 
String userId = user.getUserId(); 
System.out.println(userId); 
UserDetail u=userDao.findUserById(userId); 

而這正是我傳遞當前用戶ID的方法:

public UserDetail findUserById(String id) { 
     // TODO Auto-generated method stub 
     List<String> users = new ArrayList<String>(); 
     try{ 

     users = sessionFactory.getCurrentSession().createQuery("from user_detail where id= ?").setParameter(0, id).list(); 

     System.out.println("user is " +users); 
     }catch(Exception e){ 
      System.out.println(e.getMessage()); 
      e.printStackTrace(); 
     } 

     if (users.size() > 0) { 
       return null; 
     } else { 
       return null; 
     } 
    } 

現在我得到的結果是null。像用戶一樣是null。我在這裏做錯了什麼?

+0

'如果(users.size()> 0){返回NULL;}其他{返回NULL;}' - 你'總是從'findUserById'方法返回'null'。 – Daniel 2014-10-03 06:27:24

+0

@ Daniel..ok那是一個error.another錯誤,因爲它不打印user_detail表中的任何內容。 – user3189357 2014-10-03 06:34:04

+0

看到我得到的輸出爲 - 用戶ID []這樣。意味着它沒有得到正確的ID在方法。這就是爲什麼它的打印空白。 – user3189357 2014-10-03 06:42:19

回答

0

你的代碼有幾個問題。只是想指出其中的一些:

  1. UserService userService = new UserService(); - 要手動創建的服務對象,而不是讓Spring的MVC它注射到你的控制器,即:

    @Autowired private UserService userService ;

  2. UserDAO應該注入您的服務中,而不是從您的控制器調用:

    class UserServiceImpl implements UserService{ 
    
        @Autowired 
        private UserDAO userDAO; 
    } 
    
  3. 控制器的所有操作都應該調用服務方法,而不是DAO的方法。該服務應該使用DAO進行數據庫訪問。即

    UserDetail u=userDao.findUserById(userId);

    應該成爲

    UserDetail u = userService.findUserById(userId);

和在服務:

class UserServiceImpl implements UserService{ 

     @Autowire 
     private UserDAO userDAO; 

     @Override 
     public UserDetail findUserById(Long userId){ 
      return userDAO.findUserById(userId); 
     } 
} 
  • if (users.size() > 0) { return null; } else { return null; }

    總是返回null。應該是:

    if (`users.isEmpty()){ 
         return users.get(0); 
    }else { return null;} 
    
  • users = sessionFactory.getCurrentSession().createQuery("from user_detail where id= ?").setParameter(0, id).list();

    您的查詢是錯誤的。你應該使用當前的bean類名,而不是在您的查詢的表名,即createQuery("FROM UserDetail WHERE id = ?")

  • 相關問題