Мой сайт позволяет пользователям, не прошедшим проверку подлинности (анонимным), выполнять поиск контента, для которого требуется аутентификация для просмотра. В настоящее время, когда они нажимают на ссылку, чтобы просмотреть сведения об одном из элементов контента на странице результатов поиска, Spring Security правильно идентифицирует пользователя как не прошедшую проверку подлинности и отображает страницу входа. Тем не менее, я хотел бы вмешаться и вместо этого отобразить страницу, чтобы побудить анонимного пользователя зарегистрироваться на сайте. Я проследил, что происходит в цепочке фильтров, но мне не ясно, должен ли я расширять существующий фильтр или обработчик или создавать собственный фильтр или обработчик. Если это позже, я не уверен, куда он должен идти.Spring Security 4 перехват анонимного пользователя AccessDeniedException
Когда я запускаю это через отладку я вижу следующее происходящий:
ExceptionTranslationFilter.doFilter
FilterSecurityInterceptor
выполняет, который определяет, что страница детали требует аутентификации (возвращает -1 голос и бросаетAccessDeniedException
)ExceptionTranslationFilter
уловов исключение, определяет, что пользователь является анонимным, и называетauthenticationEntryPoint
, в этом случаеLoginUrlAuthenticationEntryPoint
LoginUrlAuthenticationEntryPoint
вызываетDefaultRedirectStrategy
, который перенаправляет пароль пользователя ge
Итак, в основном мне нужно переопределить перенаправление на страницу входа для этого одного варианта использования. Мое лучшее предположение заключается в создании настраиваемого фильтра, который проверяет комбинацию анонимного пользователя, который обращается к этой конкретной странице подробностей, и перенаправляет на страницу соединения, вставляя фильтр в цепочку после ExceptionTranslationFilter
. Или это полный избыток для обработки перенаправления одной страницы, и есть ли более простой способ сделать это?
Нет, создать и ввести пользовательские 'AuthenticationEntryPoint' один, который решил, на какую страницу для перенаправления вместо страницы входа по умолчанию. Не взламывайте фильтр, просто создайте подходящую точку входа. –
@ M.Deinum Спасибо за подсказку - он отлично работал! Единственный побочный эффект - члены сайта будут видеть страницу соединения, если они еще не вошли в систему, но на самом деле это нормально, так как словосочетание на странице охватывает эту ситуацию. – LWK69