Spring Security, Spring MVC, PreAuthorise аннотации и обработка исключений
Я борюсь с Spring Security и обработкой исключений.
У меня есть следующий обработчик исключений, настроенный в моем контексте сервлета:
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="defaultErrorView" value="/errors/general-error"/>
<property name="defaultStatusCode" value="500" />
<property name="warnLogCategory" value="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"/>
</bean>
Это перехватывает любые неперехваченные исключения и показывает страницу с общей ошибкой.
У меня также настроена Spring Security с использованием единого входа CAS на сервере. Если в моей конфигурации безопасности у меня есть следующее:
<security:intercept-url pattern="/secure/**" access="hasRole('USER')" />
Если пользователь, не прошедший проверку подлинности, заходит в "/secure", он правильно перенаправляется для входа в систему, затем возвращается и может просматривать страницу.
Я бы предпочел использовать PreAuthorise()
аннотации методов MVC, вместо того, чтобы определять URL-адреса вручную. Так что вместо этого, если у меня есть следующая аннотация:
@PreAuthorize("hasRole('USER')")
@RequestMapping("/secure")
public String displaySecurePage(
...
}
Перенаправление на сервер CAS SSO не происходит, и Spring просто отображает страницу с общей ошибкой с исключением org.springframework.security.access.AccessDeniedException: Access is denied
Почему существует разница между двумя способами определения прав доступа и как я могу использовать PreAuthorise
аннотация с Spring правильно направляет неаутентифицированного пользователя для входа в систему, и все еще есть обработчик исключений для перехвата других исключений?