Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring实体按角色忽略列_Java_Spring_Spring Security_Jackson_Spring Data - Fatal编程技术网

Java Spring实体按角色忽略列

Java Spring实体按角色忽略列,java,spring,spring-security,jackson,spring-data,Java,Spring,Spring Security,Jackson,Spring Data,我有一个作为实体持久化的表。只有在用户具有“ADMIN”角色时,才应序列化表的一列(通过jackson)。如何添加条件以仅按安全角色序列化 代码: 这样做的结果是,如果具有适当安全权限的用户(即管理员)访问,则会返回JSON中的角色密钥/值对,但如果非管理员访问,则不会返回。@PreAuthorize注释不起作用。一种解决方案可能是为@JsonFilter实现自定义BeanPropertyFilter,您可以在其中实现所需的逻辑(从SecurityContext获取角色并基于该逻辑获取筛选器属性

我有一个作为实体持久化的表。只有在用户具有“ADMIN”角色时,才应序列化表的一列(通过jackson)。如何添加条件以仅按安全角色序列化

代码:


这样做的结果是,如果具有适当安全权限的用户(即管理员)访问,则会返回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;
    }