我正在处理一段使用@InitBinder
准备org.springframework.validation.Validator
的代码。
问题是,如果我将@PreAuthorize
添加到控制器中,则验证永远不会完成。没有它,一切都会正常工作。我授权什么都无所谓。使用permitAll
足以让Spring绕过验证。
Ẃ我在这里想念什么?
一个简单的控制器示例:
@RestController
@PreAuthorize("permitAll") // If I comment this line validator is called
public class TestController {
@Resource
private ValidPositive validPositive;
@InitBinder
private void initValidPositive(WebDataBinder binder) {
binder.setValidator(validPositive);
}
@PostMapping("/isPositive")
public ResponseEntity<Boolean> isPositive(@RequestBody @Valid Integer number,
BindingResult br) {
return new ResponseEntity<>(CollectionUtils.isEmpty(br.getAllErrors()),
HttpStatus.OK);
}
}
ValidPositive
@Component
public class ValidPositive implements Validator {
@Override
public boolean supports(Class<?> clazz) {
return clazz.isAssignableFrom(Integer.class);
}
@Override
public void validate(Object target, Errors errors) {
if (((Integer) target).compareTo(0) < 0) {
errors.rejectValue("", "not positive");
}
}
}
来自gradle.build的某些版本信息
springBootVer ='1.5.14.RELEASE'
springSecurityVer ='5.0.6.RELEASE'
springVer ='4.3.18.RELEASE'
我无法调整版本或更改代码太多,但是我需要获得授权才能工作而不破坏验证。