Я использую Spring Boot 2.x, Spring Data REST, Hibernate.
У меня контроллер Spring, как это:
@RepositoryRestController
@PreAuthorize("isAuthenticated()")
public class AgentController {
@PreAuthorize("permitAll()")
@PostMapping(path = "/agents/verifyEmail")
public ResponseEntity<?> verifyEmail(@RequestParam(required = true) String token, @RequestParam(required = true) String tenantId, Locale locale) {
SecurityUtils.runAs("system", Role.ROLE_ADMIN);
return ResponseEntity.ok(verificationTokenService.verifyEmail(token, tenantId));
}
Я думал, аннотация @PreAuthorize("permitAll()")
в методе verifyEmail переопределяет корень @PreAuthorize("isAuthenticated()")
, но это не так.Я должен удалить корневую аннотацию, если я хочу, чтобы мой вызов REST пришел к методу.
Это так и должно быть?Я хотел бы открыть только несколько методов, и я подумал, что можно безопасно защитить весь контроллер с помощью @PreAuthorize("isAuthenticated()")
и добавить исключение только к нескольким методам, которые мне нужны, чтобы быть публичными.
Должен ли я создать новый конкретный контроллердля публичных методов?