在Spring控制器中使用@PreAuthorize禁用验证

时间:2019-06-10 08:52:03

标签: java spring spring-boot spring-security

我正在处理一段使用@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'

我无法调整版本或更改代码太多,但是我需要获得授权才能工作而不破坏验证。

0 个答案:

没有答案