我正在使用spring-boot-starter-data-rest开发REST API。我想与JPA同步的一个类是User类,其中包含有关用户的信息,包括允许谁访问API。
不幸的是,拥有User和UserRepository意味着我的User类在我的API中公开。我能够删除Id(在configureRepositoryRestConfiguration函数中)和用户名和密码(通过将@JsonIgnore添加到我的User类的每个变量)。
不幸的是,API的用户仍然可以请求users表(谁返回一个空用户列表)。虽然这不是一个真正的问题,但我宁愿删除/ users端点。
无法将@JsonIgnore添加到整个User类。
答案 0 :(得分:2)
导出存储库取决于RepositoryDetectionStrategy。 默认策略是:
公开所有公共存储库接口,但考虑@(存储库)RestResource的
exported
标志。
根据它来禁用您的回购'您可以为此代表将exported
标记设置为false
:
@RepositoryRestResource(exported = false)
public interface UserRepo extends JpaRepository<User, Integer> {
//...
}
另一种方法是将 RepositoryDetectionStrategy 全局更改为ANNOTATED
:
只有使用@(Repository)RestResource注释的存储库才会被公开,除非它们的导出标志设置为false。
@Configuration
public class RestConfig extends RepositoryRestConfigurerAdapter {
@Override
public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
config.setRepositoryDetectionStrategy(RepositoryDetectionStrategy.RepositoryDetectionStrategies.ANNOTATED);
super.configureRepositoryRestConfiguration(config);
}
}
然后,不要将@RepositoryRestResource
注释应用于不需要导出的回购。
<强>更新强>
我们也可以使用此应用程序属性来设置策略:
spring.data.rest.detection-strategy=default
答案 1 :(得分:1)
您可以通过将此注释添加到存储库来隐藏某些存储库:@RepositoryRestResource(exported = false)
。
答案 2 :(得分:0)
有projections之类的东西。
您可以使用所需的字段定义界面,并将其用作存储库的方法:
@Projection(name = "simpleUser", types = { User.class })
interface SimpleUser {
String getFirstName();
String getLastName();
}