chr*_*con 7 java spring hibernate jpa spring-mvc
我有一个用户实体:
public class SpringUsers implements Serializable {
private String password;
// other fields omitted
@Basic
@Column(name = "password")
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
Run Code Online (Sandbox Code Playgroud)
及其存储库:
public interface SpringUsersRepository extends CrudRepository<SpringUsers, Integer> {
SpringUsers findByUsername(String username);
List<SpringUsers> findByUserId(Integer userId);
}
Run Code Online (Sandbox Code Playgroud)
我有一个控制器方法,应该获得与当前经过身份验证的用户具有相同userId(内部使用)的所有注册用户的列表:
public List<SpringUsers> getRegisteredUsers() {
CustomUserDetails authenticatedUserDetails = getCustomUserDetails();
List<SpringUsers> registered = springUsersRepository.findByUserId(
authenticatedUserDetails.getUserMyId());
return registered.stream().map(v -> {
v.setPassword(null);
return v;
}).collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)
我不想将密码(即使它是加密的)传递给前端 - 所以我流过用户并将密码设置为null,如上所示.
但是,我想知道是否有可能首先不在查询结果中包含用户的密码?
版本信息:
Spring boot 1.4.0和Hibernate 5.0.9.Final
您可以使用@Query选择性地包含一些字段:
// Include all fields you wanna query for using u.x syntax
// AFAIK there is no exclusion syntatic sugar
@Query("select u.id, u.username from SpringUsers u where u.id = ?1")
List<SpringUsers> findByUserId(Integer userId);
Run Code Online (Sandbox Code Playgroud)
您也可以使用预测.首先通过引入投影界面来定义投影:
interface NoPasswordUser {
Long getId();
String getUsername();
// Do not include getPassword();
}
Run Code Online (Sandbox Code Playgroud)
然后在您的存储库中使用它:
public interface SpringUsersRepository extends CrudRepository<SpringUsers, Integer> {
NoPasswordUser findByUsername(String username);
List<NoPasswordUser> findByUserId(Integer userId);
}
Run Code Online (Sandbox Code Playgroud)
无论如何,最好不要通过REST或任何远程接口公开您的实体.你可以使用DTO,这篇文章可能在这方面很有用.
使用@JsonIgnore,这将使其在后面可用,但转换为json时不会返回
@Size(min = 8)
@JsonIgnore
private String password;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6448 次 |
| 最近记录: |