Аннотация проверки Java Spring Constraint отложенное выполнение - PullRequest
0 голосов
/ 18 декабря 2018

Я создал свою пользовательскую проверку для проверки заголовков запросов. Моя аннотация добавлена ​​для метода контроллера, и я передаю необходимые значения заголовков,

@Constraint(validatedBy = AuthorizationValidator.class)
@Target(METHOD)
@Retention(RUNTIME)
public @interface Auth {

    @AliasFor("roles")
    String[] roles() default {};
}

И класс проверки:

@Log4j2
public class AuthorizationValidator implements ConstraintValidator<Auth, Object> {

    private String[] requiredRoles = {};

    @Override
    public void initialize(Auth constraintAnnotation) {
        requiredRoles = constraintAnnotation.roles();
    }

    @Override
    public boolean isValid(Object value, ConstraintValidatorContext context) {
        log.info("Checking roles");
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        List<String> role = Arrays.asList(request.getHeader("role").split("-"));

        if (!role.contains(Arrays.asList(requiredRoles))) {
            throw new AuthorizationException();
        }
        return true;
    }

И ядобавьте аннотацию к моему классу контроллера следующим образом:

    @GetMapping("/{username}")
    @Auth(roles = {"myRole"})
    public ResponseEntity<UserDto> getUser() {
    log.info("Executing controller method");
        myService.executeMethod();
        return ResponseEntity.
                status(HttpStatus.OK)
                .build();
    }

Помимо класса контроллера я также добавил аннотацию @ Validated

Проблема в том, что мне нужен мой AuthorizationValidatorвыполнить до того, как метод контроллера начнет делать что-то, но по какой-то причине сейчас в журналах я всегда вижу:

"Executing controller method"
"Checking roles"

Есть ли способ заставить выполнение проверки ограничения?

...