Я прочитал все ответы, и они великолепны. Но в компании, в которой я работал, из-за нескольких ограничений и аудита обязательно входил в базу данных. В любом случае, у нас было несколько способов войти в систему, и решение было установить конвейер, где наши программисты могли бы подключиться к конвейеру и войти в базу данных, файл, консоль или даже переслать журнал в порт, который будет использоваться другими приложениями. Этот конвейер не прерывает нормальный процесс, и сохранение файла журнала в то же время, когда вы входите в базу данных, гарантирует, что вы редко теряете строку. Я предлагаю вам изучить дальнейшее log4net, что это здорово для этого.
Возможно, это не полный ответ на ваши вопросы, но, возможно, он может вам помочь.
Код, который вызывается, когда вы НЕ используете программный вход, но можно найти стандартный здесь:
org.springframework.security.ui.webapp.AuthenticationProcessingFilter
Я думаю, вы были вдохновлены этим в своем коде. Это выглядит очень похоже.
Аналогично, код, выполняемый при доступе к / j_spring_security_logout
в стандартном подходе, находится здесь:
org.springframework.security.ui.logout.LogoutFilter
LogoutFilter вызывает несколько обработчиков. Используемый нами обработчик называется:
org.springframework.security.ui.logout.SecurityContextLogoutHandler
, поэтому вы можете использовать тот же код в своем подходе.
Вы действительно будете уязвимы для атак фиксации сеанса. Чтобы исправить это, вы снова можете «вдохновиться» кодом Spring. Для создания нового сеанса вам, очевидно, потребуется доступ к httpsession, поэтому вам, возможно, придется провести некоторый рефакторинг.
Если вы видите метод SessionUtils
. startNewSessionIfRequired
.
Это перенесет аутентификацию в новый сеанс. Вы могли бы вызвать этот метод напрямую или просто немного реорганизовать код.
Что касается программного выхода из системы, вы не можете слишком ошибиться, просто вызвав session.invalidate ()
, когда вам нужно чтобы вывести человека из системы. Это сделает все необходимое с точки зрения общей безопасности, но имейте в виду, что вам может потребоваться очистить некоторые вещи в сеансе. Если у вас очень сложный набор фильтров и т. Д., И вам нужно убедиться, что пользователь вышел из системы для остальной части запроса, вы можете добавить:
SecurityContextHolder.getContext().setAuthentication(null);
Что касается перехвата URL-адресов, вы можете просто установить их на что-то неиспользованный и игнорируйте его! Я не уверен, что вы можете отключить перехват в конфигурации - если вы действительно хотите удалить его, посмотрите AuthenticationProcessingFilter
- вы можете настроить это. Если вы это сделаете, вам придется вручную настроить Spring Security xml и не использовать предоставленные пространства имен. Хотя это не так уж сложно - посмотрите некоторую старую документацию, и вы увидите, как это сделать.
Надеюсь, это поможет!
SecurityContextHolder.getContext().setAuthentication(null);
Что касается перехвата URL-адресов, вы можете просто установить их на что-то неиспользуемое и игнорировать это! Я не уверен, что вы можете отключить перехват в конфигурации - если вы действительно хотите удалить его, посмотрите AuthenticationProcessingFilter
- вы можете настроить это. Если вы это сделаете, вам придется вручную настроить Spring Security xml и не использовать предоставленные пространства имен. Хотя это не так уж сложно - посмотрите некоторую старую документацию, и вы увидите, как это сделать.
Надеюсь, это поможет!
SecurityContextHolder.getContext().setAuthentication(null);
Что касается перехвата URL-адресов, вы можете просто установить их на что-то неиспользуемое и игнорировать это! Я не уверен, что вы можете отключить перехват в конфигурации - если вы действительно хотите удалить его, посмотрите AuthenticationProcessingFilter
- вы можете настроить это. Если вы это сделаете, вам придется вручную настроить Spring Security xml и не использовать предоставленные пространства имен. Хотя это не так уж сложно - посмотрите некоторую старую документацию, и вы увидите, как это сделать.
Надеюсь, это поможет!
Вам придется вручную настроить Spring security xml и не использовать предоставленные пространства имен. Хотя это не так уж сложно - посмотрите некоторую старую документацию, и вы увидите, как это сделать.Надеюсь, это поможет!
Вам придется вручную настроить Spring security xml и не использовать предоставленные пространства имен. Хотя это не так уж сложно - посмотрите некоторую старую документацию, и вы увидите, как это сделать.Надеюсь, это поможет!
1) Программный выход
2) Сообщите Spring Security НЕ перехватывать определенные URL-адреса, этот тип зависит от того, как настроено пространство для URL-адресов вашего приложения. Если все ваши страницы (кроме / logIn и / logout) находятся в контексте / myApp, вы могли бы сделать это:
<http ....>
<intercept-url pattern="/myApp/**" ..>
....
</http>
Для программного выхода из системы также можно выбросить org.springframework.security.core.AuthenticationException
. Например, SessionAuthenticationException
. В этом случае ExceptionTranslationFilter
инициирует выход.