我有一个spring控制器,具有以下Map
@RestController
public class UserController {
public UserService service;
public UserController(UserService service) {
this.service = service;
}
@PostMapping("/users/create")
ResponseEntity<User> create (@RequestBody User user){
return new ResponseEntity<>(this.service.create(user), HttpStatus.CREATED);
}
@GetMapping("/users/{id}")
ResponseEntity<User> getById(@PathVariable Long id) {
return ResponseEntity.ok(this.service.findById(id));
}
@GetMapping("/users/all")
List<User> getAll() {
return this.service.findAll();
}
@PutMapping("/users/{id}")
User updateUser(@RequestBody User newUser, @PathVariable Long id) {
return this.service.updateUser(newUser, id);
}
@DeleteMapping("/users/{id}")
void deleteUser(@PathVariable Long id) {
this.service.deleteById(id);
}
}
当我向 http://localhost:8080/users/all
我得到了所有用户的列表。但我注意到如果我向 http://localhost:8080/users
它返回一个包含所有数据的列表,如下所示
{
"_embedded": {
"users": [
{
"admin": false,
"name": "Name",
"_links": {
"self": {
"href": "http://localhost:8080/users/1"
},
"user": {
"href": "http://localhost:8080/users/1"
},
"tickets": {
"href": "http://localhost:8080/users/1/tickets"
}
}
},
{
"admin": false,
"name": "Example",
"_links": {
"self": {
"href": "http://localhost:8080/users/2"
},
"user": {
"href": "http://localhost:8080/users/2"
},
"tickets": {
"href": "http://localhost:8080/users/2/tickets"
}
}
}
]
},
"_links": {
"self": {
"href": "http://localhost:8080/users"
},
"profile": {
"href": "http://localhost:8080/profile/users"
}
},
"page": {
"size": 20,
"totalElements": 4,
"totalPages": 1,
"number": 0
}
}
为什么spring能够返回这个数据,即使它没有显式Map,我怎么能禁用它呢。这只是一个个人训练练习,所以安全不是至关重要的,但我想知道如何避免这一点,因为如果这是真的,我可能会意外地暴露所有数据。
任何建议都将不胜感激,谢谢。
更新:有人建议get(/users/{id})Map使用空值,我将其注解掉并尝试再次调用它。提供一个号码返回405,因为该服务已不存在,但我尝试了http://localhost:8080/users/但它仍然返回上面显示的所有数据
2条答案
按热度按时间0aydgbwb1#
看起来您正在spring数据rest中使用hateoas格式https://spring.io/projects/spring-data-rest.
您可以通过设置参数来禁用它:spring.data.rest.defaultmediatype=application/json
p5cysglq2#
我设法找到了解决办法,补充说:
到main方法将禁用hateoas函数
我从这篇文章中找到了解决方案:spring数据rest没有hateoas