我有一个模型 ,以下面的方式描述:
@Table
@Entity
@Data
@Builder
@ToString
@EqualsAndHashCode
@AllArgsConstructor
@NoArgsConstructor
public class User {
// ...skipped...
private String foo;
}
我也有,创建一个新的实体的方法的服务 :
@Service
public class UserService {
// ...skipped...
public User createUser(User user) {
Date currentDate = new Date();
user.setCreated(currentDate);
userRepository.save(user);
return user;
}
}
我也有一个控制器和一个映射方法:
@Controller
@RequestMapping(UserRouteRegistry.FIRST_LEVEL + "/*")
public class UserController {
// ...skipped...
@PostMapping(UserRouteRegistry.SIGN_UP)
public String signUp(
@ModelAttribute("user") @Validated(User.CreateUserGroup.class) User user,
BindingResult result,
WebRequest request,
RedirectAttributes redirectAttributes
) {
// ...mercellessly skipped...
userRegistered = userService.createUser(user);
// ...mercellessly skipped...
}
一切都非常简单,不是吗?
我没有在foo
在网络表单字段,我并不需要一个网络用户设置此字段,它应该是一些非常私人领域,不应该由网络用户直接受到影响。
当我做一个自定义的POST请求,我看到了一个新的实体正在与创建foo
通过在请求中设定的数据填充字段:
POST /user/sign-up HTTP/1.1
Host: 127.0.0.1:8080
Origin: http://127.0.0.1:8080
Content-Type: application/x-www-form-urlencoded
Referer: http://127.0.0.1:8080/user/sign-up
Cookie: SL_G_WPT_TO=ru; SL_GWPT_Show_Hide_tmp=1; SL_wptGlobTipTmp=1; BL_D_PROV=; BL_T_PROV=; JSESSIONID=E1190293BD183C647245BAE03E6DCDDA
cache-control: no-cache
Postman-Token: e572bccf-ff0a-4b0b-a181-dd0aa20dca99
foo=13
> SELECT foo FROM user ORDER BY id DESC LIMIT 1 \G
*************************** 1. row ***************************
foo: 13
1 row in set (0.0005 sec)
是的,这似乎很正确,但还有什么办法阻止 ,不知怎的?
分配“私人”领域null
的服务水平值? 这将是非常乏味,但它会工作。 设置一些@annotation(顺便说一下,它应该是什么样的注释?)在模型上水平这个领域? 我不知道这将是合乎逻辑的,因为我的意见。 在过滤控制器级别的参数,地方列出所有允许的吗? 可能是这样?
什么是正确的方法是什么?
谢谢!