У меня есть контроллер, который имеет много действий, и он задает аннотацию @PreAuthorize на уровне класса по умолчанию, но одно из действий, которые я хочу разрешить кому-либо (действие "show").
@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 вообще ... который будет работать, ноэто глупо.Я хочу сохранить все свои действия для пресс-релиза в одном контроллере.
Спасибо за помощь!