【问题标题】:Why MongoRepository expose rest crud api and how to disable when using restController为什么 MongoRepository 公开rest crud api以及使用restController时如何禁用
【发布时间】:2021-03-10 09:15:51
【问题描述】:

我有一个使用restController 公开rest api 的spring 应用程序。它调用一个图层服务,然后调用一个图层 Dao,我使用 MongoRepository 来获取杂物。

public interface ProjectDao extends MongoRepository<Project, String> {
}

@CrossOrigin
@RestController
@Slf4j
@RequestMapping("/api/data")
public class DataController {
...
    @GetMapping(value = "projects/{id}")
    public Project findProjectById(@PathVariable String id) throws ResponseStatusException {
        Optional<Project> project = projectService.findById(id);

        if (project.isEmpty()) throw new ResponseStatusException(HttpStatus.NOT_FOUND, "product with id " + id + " does not exists");

        return project.get();
    }
...
}

我刚刚配置 swagger 来生成文档,发现我可以直接调用从 mongorepository 公开的所有 crud 方法!!!但我不希望这种行为,因为我只想从我的休息控制器公开 api。

我有我的方法 GET /api/data/projects/{id} 调用我的控制器的 findProjectById 但我也有一个方法 GET /projects/{id} 直​​接调用 mongorepository。其他的都喜欢删除,放,发帖,真的很危险。

我正在使用这个依赖项

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-rest</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-boot-starter</artifactId>
            <version>3.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

我找不到如何配置它以及为什么默认情况下所有 mongorepository 的其余 api 都是公开的!

我有人知道如何禁用它,谢谢!

【问题讨论】:

    标签: java spring mongodb rest


    【解决方案1】:

    好的,我找到了只修改maven依赖的解决方案。

    我应该使用

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    

    代替

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-rest</artifactId>
    </dependency>
    

    基于数据模型发布rest服务。

    【讨论】:

      猜你喜欢
      • 2021-01-30
      • 1970-01-01
      • 2013-06-13
      • 2021-01-24
      • 2013-01-05
      • 2017-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多