Программное использование безопасности Spring

Я прочитал все ответы, и они великолепны. Но в компании, в которой я работал, из-за нескольких ограничений и аудита обязательно входил в базу данных. В любом случае, у нас было несколько способов войти в систему, и решение было установить конвейер, где наши программисты могли бы подключиться к конвейеру и войти в базу данных, файл, консоль или даже переслать журнал в порт, который будет использоваться другими приложениями. Этот конвейер не прерывает нормальный процесс, и сохранение файла журнала в то же время, когда вы входите в базу данных, гарантирует, что вы редко теряете строку. Я предлагаю вам изучить дальнейшее log4net, что это здорово для этого.

http://logging.apache.org/log4net/

37
задан 22 June 2009 в 15:47
поделиться

4 ответа

Возможно, это не полный ответ на ваши вопросы, но, возможно, он может вам помочь.

Код, который вызывается, когда вы НЕ используете программный вход, но можно найти стандартный здесь:

org.springframework.security.ui.webapp.AuthenticationProcessingFilter

Я думаю, вы были вдохновлены этим в своем коде. Это выглядит очень похоже.

Аналогично, код, выполняемый при доступе к / j_spring_security_logout в стандартном подходе, находится здесь:

org.springframework.security.ui.logout.LogoutFilter

LogoutFilter вызывает несколько обработчиков. Используемый нами обработчик называется: org.springframework.security.ui.logout.SecurityContextLogoutHandler , поэтому вы можете использовать тот же код в своем подходе.

23
ответ дан 27 November 2019 в 04:59
поделиться

Вы действительно будете уязвимы для атак фиксации сеанса. Чтобы исправить это, вы снова можете «вдохновиться» кодом 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 и не использовать предоставленные пространства имен. Хотя это не так уж сложно - посмотрите некоторую старую документацию, и вы увидите, как это сделать.

Надеюсь, это поможет!

8
ответ дан 27 November 2019 в 04:59
поделиться

1) Программный выход

  1. вызовите HttpServletRequest.getSession (false) .invalidate
  2. вызовите SecurityContextHolder.clearContext ()

2) Сообщите Spring Security НЕ перехватывать определенные URL-адреса, этот тип зависит от того, как настроено пространство для URL-адресов вашего приложения. Если все ваши страницы (кроме / logIn и / logout) находятся в контексте / myApp, вы могли бы сделать это:

<http ....>
  <intercept-url pattern="/myApp/**" ..>
 ....
</http>
6
ответ дан 27 November 2019 в 04:59
поделиться

Для программного выхода из системы также можно выбросить org.springframework.security.core.AuthenticationException . Например, SessionAuthenticationException . В этом случае ExceptionTranslationFilter инициирует выход.

0
ответ дан 27 November 2019 в 04:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: