У меня есть контроллер, у которого много действий, и он определяет аннотацию @PreAuthorize по умолчанию на уровне класса, но одно из действий, которое я хочу разрешить кому угодно (" показать " action).
@RequestMapping("/show/{pressReleaseId}")
@PreAuthorize("permitAll")
public ModelAndView show(@PathVariable long pressReleaseId) {
ModelAndView modelAndView = new ModelAndView(view("show"));
modelAndView.addObject("pressRelease",
sysAdminService.findPressRelease(pressReleaseId));
return modelAndView;
}
К сожалению, Spring Security выдает следующее исключение:
org.springframework.security.authentication.AuthenticationCredentialsNotFoundException: An Authentication object was not found in the SecurityContext
at org.springframework.security.access.intercept.AbstractSecurityInterceptor.credentialsNotFound(AbstractSecurityInterceptor.java:321)
at org.springframework.security.access.intercept.AbstractSecurityInterceptor.beforeInvocation(AbstractSecurityInterceptor.java:195)
at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:64)
Как я могу заставить Spring Security НЕ генерировать это исключение? Я просто хочу позволить любому войти - неаутентифицированным пользователям и аутентифицированным пользователям - Всем.
Моё единственное решение - поместить этот метод в другой контроллер вообще без @PreAuthorize ... что будет работать, но это глупо. Я хочу, чтобы все мои действия для пресс-релизов находились в одном контроллере.
Спасибо за помощь!