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导出存储库依赖于RepositoryDetectionStrategy。 默认策略是:
公开所有公共存储库接口,但考虑@(Repository)RestResource 的
exported
标志。
根据它来禁用“repo”的导出,您可以为此 repo 设置 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
注解应用于不需要导出的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 Security(spring-boot 项目)中使用 ldap 凭据进行 Http 基本身份验证以保护休息服务调用