使用Spring安全性控制JSON数据

使用Spring安全性控制JSON数据,json,spring-mvc,spring-security,Json,Spring Mvc,Spring Security,我有一个名为Order的类,如下所示 class Order{ private int id; private String name; private String amount; //getters and setters } 使用Spring安全性,我需要能够控制作为Spring控制器响应返回的数据。例如,管理员可以查看订单的所有数据,但客户只能看到名称和金额。如何使用SpringSecurity过滤JSON数据 [{id:1,n

我有一个名为Order的类,如下所示

    class Order{
    private int id;
    private String name;
    private String amount;
    //getters and setters
    }
使用Spring安全性,我需要能够控制作为Spring控制器响应返回的数据。例如,管理员可以查看订单的所有数据,但客户只能看到名称和金额。如何使用SpringSecurity过滤JSON数据

     [{id:1,name:order1,amount:100}, {id:2,name:order2,amount:200}] 
客户的输出应该是

    [{name:order1,amount:100}, {name:order2,amount:200}].

有没有办法做到这一点

您可以使用Spring数据和Spring安全性对其进行一些破解:

public interface FooRepository extends CrudRepository<Foo, Long> {

    @Query(
            value = "select id, amount, case when ?#{hasRole('admin')} then name else null end as name from foo where id=?1",
            nativeQuery = true
    )
    Foo findOne(Long id);
}
或者您可以尝试使用Spring数据REST

//untested:
@Projection(name = "detailed", types = Foo.class)
public interface FooDetailProjection {

    @Value("?#{ hasRole('admin')? target.name: null}")
    public String getName();
}

或考虑直接在数据库中使用。 我想控制JSON数据而不是DB查询,怎么样。我正在使用Hibernate标准查询数据库。您好,请您进一步解释第二种方法,即EvaluationContextensionSupport。@Raghavendra,它只允许您将spring安全表达式放入spring数据查询中

//untested:
@Projection(name = "detailed", types = Foo.class)
public interface FooDetailProjection {

    @Value("?#{ hasRole('admin')? target.name: null}")
    public String getName();
}