Spring开机休息忽略一个class
Spring boot rest ignore one class
我正在使用 spring-boot-starter-data-rest 开发 REST API。我想与 JPA 同步的一个 class 是包含有关用户的信息的用户 class,包括允许谁访问 API。
不幸的是,拥有 User 和 UserRepository 意味着我的用户 class 暴露在我的 API 中。我能够删除诸如 Id(在 configureRepositoryRestConfiguration 函数中)和用户名和密码(通过将 @JsonIgnore 添加到我的用户 class 的每个变量)之类的东西。
不幸的是,API 的用户仍然可以请求用户 table(returns 的用户列表为空)。虽然这不是真正的问题,但我宁愿删除 /users 端点。
向整个用户添加@JsonIgnore class 是不可能的。
您可以定义包含所需字段的接口,并将其用作存储库的方法:
@Projection(name = "simpleUser", types = { User.class })
interface SimpleUser {
String getFirstName();
String getLastName();
}
您可以通过将此注释添加到您的存储库来隐藏某些存储库:@RepositoryRestResource(exported = false)
。
导出存储库取决于 RepositoryDetectionStrategy。 默认策略是:
Exposes all public repository interfaces but considers @(Repository)RestResource’s exported
flag.
根据它禁用导出你的 'repo' 你可以为这个 repo 设置 exported
标志到 false
:
@RepositoryRestResource(exported = false)
public interface UserRepo extends JpaRepository<User, Integer> {
//...
}
另一种方法是将 RepositoryDetectionStrategy 全局更改为 ANNOTATED
:
Only repositories annotated with @(Repository)RestResource are exposed, unless their exported flag is set to false.
@Configuration
public class RestConfig extends RepositoryRestConfigurerAdapter {
@Override
public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
config.setRepositoryDetectionStrategy(RepositoryDetectionStrategy.RepositoryDetectionStrategies.ANNOTATED);
super.configureRepositoryRestConfiguration(config);
}
}
那就不要对不需要导出的repos应用@RepositoryRestResource
注解。
更新
我们也可以使用这个应用程序属性来设置策略:
spring.data.rest.detection-strategy=default
我正在使用 spring-boot-starter-data-rest 开发 REST API。我想与 JPA 同步的一个 class 是包含有关用户的信息的用户 class,包括允许谁访问 API。
不幸的是,拥有 User 和 UserRepository 意味着我的用户 class 暴露在我的 API 中。我能够删除诸如 Id(在 configureRepositoryRestConfiguration 函数中)和用户名和密码(通过将 @JsonIgnore 添加到我的用户 class 的每个变量)之类的东西。
不幸的是,API 的用户仍然可以请求用户 table(returns 的用户列表为空)。虽然这不是真正的问题,但我宁愿删除 /users 端点。
向整个用户添加@JsonIgnore class 是不可能的。
您可以定义包含所需字段的接口,并将其用作存储库的方法:
@Projection(name = "simpleUser", types = { User.class })
interface SimpleUser {
String getFirstName();
String getLastName();
}
您可以通过将此注释添加到您的存储库来隐藏某些存储库:@RepositoryRestResource(exported = false)
。
导出存储库取决于 RepositoryDetectionStrategy。 默认策略是:
Exposes all public repository interfaces but considers @(Repository)RestResource’s
exported
flag.
根据它禁用导出你的 'repo' 你可以为这个 repo 设置 exported
标志到 false
:
@RepositoryRestResource(exported = false)
public interface UserRepo extends JpaRepository<User, Integer> {
//...
}
另一种方法是将 RepositoryDetectionStrategy 全局更改为 ANNOTATED
:
Only repositories annotated with @(Repository)RestResource are exposed, unless their exported flag is set to false.
@Configuration
public class RestConfig extends RepositoryRestConfigurerAdapter {
@Override
public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
config.setRepositoryDetectionStrategy(RepositoryDetectionStrategy.RepositoryDetectionStrategies.ANNOTATED);
super.configureRepositoryRestConfiguration(config);
}
}
那就不要对不需要导出的repos应用@RepositoryRestResource
注解。
更新
我们也可以使用这个应用程序属性来设置策略:
spring.data.rest.detection-strategy=default