Java Spring实体按角色忽略列
我有一个作为实体持久化的表。只有在用户具有“ADMIN”角色时,才应序列化表的一列(通过jackson)。如何添加条件以仅按安全角色序列化 代码:Java Spring实体按角色忽略列,java,spring,spring-security,jackson,spring-data,Java,Spring,Spring Security,Jackson,Spring Data,我有一个作为实体持久化的表。只有在用户具有“ADMIN”角色时,才应序列化表的一列(通过jackson)。如何添加条件以仅按安全角色序列化 代码: 这样做的结果是,如果具有适当安全权限的用户(即管理员)访问,则会返回JSON中的角色密钥/值对,但如果非管理员访问,则不会返回。@PreAuthorize注释不起作用。一种解决方案可能是为@JsonFilter实现自定义BeanPropertyFilter,您可以在其中实现所需的逻辑(从SecurityContext获取角色并基于该逻辑获取筛选器属性
这样做的结果是,如果具有适当安全权限的用户(即管理员)访问,则会返回JSON中的角色密钥/值对,但如果非管理员访问,则不会返回。@PreAuthorize注释不起作用。一种解决方案可能是为
@JsonFilter
实现自定义BeanPropertyFilter
,您可以在其中实现所需的逻辑(从SecurityContext获取角色并基于该逻辑获取筛选器属性)。有关JsonFilters的更多信息,请参阅。我没有亲自尝试过这个,但是请随意尝试一下。这是一个好主意。我希望有更好的方法,但如果找不到,我会试试这个。你找到干净的解决办法了吗?我有同样的问题,如果你发现了什么,你能在这里检查我的新问题吗@对不起,我没有。我求助于创建唯一的DTO并按角色组装资源。一种解决方案可能是为@JsonFilter
实现自定义BeanPropertyFilter
,您可以在其中实现所需的逻辑(从SecurityContext获取角色并基于此筛选属性)。有关JsonFilters的更多信息,请参阅。我没有亲自尝试过这个,但是请随意尝试一下。这是一个好主意。我希望有更好的方法,但如果找不到,我会试试这个。你找到干净的解决办法了吗?我有同样的问题,如果你发现了什么,你能在这里检查我的新问题吗@对不起,我没有。我求助于创建唯一的DTO并按角色组装资源。一种解决方案可能是为@JsonFilter
实现自定义BeanPropertyFilter
,您可以在其中实现所需的逻辑(从SecurityContext获取角色并基于此筛选属性)。有关JsonFilters的更多信息,请参阅。我没有亲自尝试过这个,但是请随意尝试一下。这是一个好主意。我希望有更好的方法,但如果找不到,我会试试这个。你找到干净的解决办法了吗?我有同样的问题,如果你发现了什么,你能在这里检查我的新问题吗@对不起,我没有。我求助于制作独特的DTO并按角色组装资源。
@Entity
@Table(name="Profile")
@SecondaryTable(name="Account", pkJoinColumns=@PrimaryKeyJoinColumn(name="id", referencedColumnName="user_id"))
public class Profile {
@Id
@GeneratedValue
@Column(name="user_id")
private Long userId;
@Column(name="username", unique=true, nullable=false)
private String username;
@Column(name="email", unique=true, nullable=false)
private String email;
@Column(table="Account", name="role", nullable=false)
@Enumerated(EnumType.STRING)
private Role role;
.....
@PreAuthorize("hasRole('ROLE_ADMIN')")
public Role getRole() {
return role;
}
@PreAuthorize("hasRole('ROLE_ADMIN')")
public void setRole(Role role) {
this.role = role;
}