使用Spring安全性控制JSON数据
我有一个名为Order的类,如下所示使用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
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();
}