我正在使用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));
}
我认为方法verifyEmail中的注释@PreAuthorize("permitAll()")
会覆盖根@PreAuthorize("isAuthenticated()")
,但事实并非如此。
如果要我的REST调用到达该方法,则必须删除根注释。
应该是这样吗?我只想打开几种方法,我认为可以使用@PreAuthorize("isAuthenticated()")
安全地保护整个控制器,并仅对需要公开的几种方法添加例外。
我应该为公共方法创建一个新的特定控制器吗?