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 是不可能的。

projections

您可以定义包含所需字段的接口,并将其用作存储库的方法:

@Projection(name = "simpleUser", types = { User.class }) 
interface SimpleUser { 

  String getFirstName(); 

  String getLastName(); 
}

您可以通过将此注释添加到您的存储库来隐藏某些存储库:@RepositoryRestResource(exported = false)

更多信息在这里:http://docs.spring.io/spring-data/rest/docs/current/reference/html/#customizing-sdr.hiding-repositories

导出存储库取决于 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> {
    //...
}

另一种方法是将 RepositoryDe​​tectionStrategy 全局更改为 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

Source