gpt4 book ai didi

java - Spring Boot,如何隐藏或阻止加载实体的某些属性

转载 作者:行者123 更新时间:2023-12-02 00:58:34 27 4
gpt4 key购买 nike

我有一个 Account 类,其中包含用户名电子邮件和密码等所有信息。我想使用这个类为我提供一些属性,例如用户名或电子邮件以显示在他/她的个人资料页面上,但不是密码,因为我知道让这个字段通过 http/https 协议(protocol)是不安全的,即使它是经过哈希处理的。我尝试使用 @Transient 隐藏它,但另一个类 AccountPrincipal 仍然需要此字段来进行身份验证。什么是正确且安全的方法来做到这一点?

这就是我尝试通过 Controller 获取一些帐户信息时信息的样子。

[
{
"accountId": 1,
"userName": "pink",
"nuggerPoint": null,
"videos": [],
"password": "$2a$10$jrL.YPkkvLN0fThW2e7Lne/J7ak0wb3XF4TyG.xNp9zcomuC1QHjG"
},
{
"accountId": 2,
"userName": "guy",
"nuggerPoint": null,
"videos": [],
"password": "$2a$10$L2st0.RTpzeoCB72G4JG9eazZpistVxpj51UL2fVbjLxxbb6zKjaa"
}
]

--

@Entity
@Table(name = "Account")
public class Account {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long accountId;
private String userName;
private String passWord;

public Account(String username, String password, Long nuggerpoint){
this.userName = username;
this.passWord = password;
this.nuggerPoint = nuggerPoint;
}
public Long getAccountId(){
return accountId;
}
public void setAccountId(Long accountId){
this.accountId = accountId;
}
public String getUserName(){
return this.userName;
}
public void setUserName(String userName){
this.userName = userName;
}
public String getPassword(){
return this.passWord;
}
public void setPassword(String password){
this.passWord = password;
}
// some other methods and properties
}

--

public class AccountPrincipal implements UserDetails {
private Account account;
public AccountPrincipal(Account account) {
this.account = account;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return new ArrayList<>();
}

@Override
public String getPassword() {
return this.account.getPassword();
}

@Override
public String getUsername() {
return this.account.getUserName();
}
//Some other methods..
}

--

最佳答案

您可以在 public String getPassword() 方法上使用 @JsonIgnore 注释来在序列化期间忽略该字段。

并在您的 public String setPassword(String password) 上使用 @JsonProperty 注解,以便在您想要设置时启用反序列化。

更多详细信息请参见:https://www.baeldung.com/jackson-field-serializable-deserializable-or-not

关于java - Spring Boot,如何隐藏或阻止加载实体的某些属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61008760/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com