Как я могу заставить разрешитьAll в Spring Security НЕ генерировать исключение AuthenticationCredentialsNotFoundException в объекте @Controller?

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

Спасибо за помощь!

6
задан egervari 20 December 2010 в 07:06
поделиться