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 правильно направляет неаутентифицированного пользователя для входа в систему, и все еще есть обработчик исключений для перехвата других исключений?

0 ответов

Другие вопросы по тегам