【发布时间】:2014-11-28 05:26:14
【问题描述】:
我正在使用 Spring 安全性进行登录。我有包含用户详细信息的User.java。
@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 security 从表中获取当前用户的全部数据。这是代码:
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 。像用户为空。我在这里做错了什么?
【问题讨论】:
-
if (users.size() > 0) {return null;} else { return null;}- 你总是从findUserById方法返回null。 -
@Daniel..ok 那是一个错误。另一个任何错误,因为它没有从 user_detail 表中打印任何内容。
-
看到我得到的输出是 - 像这样的用户 id []。意味着它在方法中没有得到正确的 id。这就是它打印空白的原因。
标签: java mysql hibernate spring-mvc