Spring Boot 休息忽略一类

Posted

技术标签:

【中文标题】Spring Boot 休息忽略一类【英文标题】:Spring boot rest ignore one class 【发布时间】:2017-11-19 05:23:21 【问题描述】:

我正在使用 spring-boot-starter-data-rest 开发一个 REST API。我想与 JPA 同步的一个类是 User 类,其中包含有关用户的信息,包括允许谁访问 API。

不幸的是,拥有 User 和 UserRepository 意味着我的 User 类在我的 API 中公开。我能够删除诸如 Id(在 configureRepositoryRestConfiguration 函数中)以及用户名和密码(通过将 @JsonIgnore 添加到我的 User 类的每个变量)之类的东西。

不幸的是,API 的用户仍然可以请求 users 表(返回一个包含空用户的列表)。虽然这不是一个真正的问题,但我宁愿删除 /users 端点。

将@JsonIgnore 添加到整个用户类是不可能的。

【问题讨论】:

如果您只是从存储库界面中删除 @RepositoryRestResource 会怎样? 从未定义过@RepositoryRestResource,我确实定义了公共接口UserRepository extends CrudRepository 【参考方案1】:

导出存储库依赖于RepositoryDetectionStrategy。 默认策略是:

公开所有公共存储库接口,但考虑@(Repository)RestResource 的exported 标志。

根据它来禁用“repo”的导出,您可以为此 repo 设置 exported 标志为 false

@RepositoryRestResource(exported = false)
public interface UserRepo extends JpaRepository<User, Integer> 
    //...

另一种方法是将RepositoryDe​​tectionStrategy全局更改为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注解应用于不需要导出的repos。

更新

我们也可以使用这个应用属性来设置策略:

spring.data.rest.detection-strategy=default

Source

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

有projections这样的东西。

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

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

  String getFirstName(); 

  String getLastName(); 

【讨论】:

但这就是 spring-data-rest 的重点。它的目的是为您的存储库公开一个宁静的 API,因此它的目的是没有 DTO。更多信息请参考projects.spring.io/spring-data-rest @systemfreund 哦,抱歉,没有注意到 spring 数据部分

以上是关于Spring Boot 休息忽略一类的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 数据休息后实体

Spring Boot 休息服务错误处理

Spring Boot数据休息时间戳解析错误

Spring Boot 休息 API

在 Spring Security(spring-boot 项目)中使用 ldap 凭据进行 Http 基本身份验证以保护休息服务调用

带有spring-boot安全休息api的角度2