Я использую Wicket с проектом Wicket Auth для моего уровня представления, и поэтому я интегрировал его с Spring Security. Это метод, который Wicket вызывает для аутентификации для меня:
@Override
public boolean authenticate(String username, String password) {
try {
Authentication request = new UsernamePasswordAuthenticationToken(
username, password);
Authentication result = authenticationManager.authenticate(request);
SecurityContextHolder.getContext().setAuthentication(result);
} catch (AuthenticationException e) {
return false;
}
return true;
}
Содержимое (внутри) моей конфигурации безопасности Spring безопасности:
<http path-type="regex">
<form-login login-page="/signin"/>
<logout logout-url="/logout" />
</http>
<global-method-security secured-annotations="enabled" />
<authentication-manager alias="authenticationManager"/>
<authentication-provider user-service-ref="userService">
<password-encoder ref="bcryptpasswordencoder" />
</authentication-provider>
Раздел 2.3.6. Фиксация защиты от прикрепления сеанса в справочной документации гласит:
Атаки фиксации сеанса - потенциальный риск, когда это возможно для злонамеренного злоумышленника создать сеанса путем доступа к сайту, затем убедить другого пользователя войти в систему с той же сессии (отправив им ссылка, содержащая идентификатор сеанса как параметр, например). SpringБезопасность защищает автоматически, создавая новый когда пользователь входит в систему. Если вы не требуют такой защиты, или противоречит некоторым другим требованиям, вы можете контролировать поведение, используя защита от фиксации сеанса атрибут, который имеет три Параметры:
- migrateSession - создает новый сеанс и копирует существующие атрибуты сеанса для нового сеанса. Это значение по умолчанию.
- none - ничего не делайте. Исходный сеанс будет сохранен.
- newSession - создайте новый "чистый" сеанс, не копируя существующие данные сеанса.
Аутентификация работает, но я, поскольку я довольно новичок в Spring безопасности У меня есть некоторые вопросы, на которые мне тоже нужны ответы:
- Обычно для входа в систему я бы установил POST-информацию об аутентификации в
j_spring_security_check
и позволил Spring Security выполнить фактический код аутентификации. Я хотел бы иметь защиту от атак сеансовой фиксации, получу ли это, когда я выполню программный логин, как и я? А если нет, что мне нужно сделать, чтобы получить его? - Как выполнить программный выход из системы?
- Как я буду использовать программный вход и выход из системы, как отключить Spring от перехвата этих URL?
Update:
Для защиты от атак с фиксацией сеанса кажется, что мне нужно вызвать метод в классе SessionUtils с сигнатурой startNewSessionIfRequired(HttpServletRequest request, boolean migrateAttributes, SessionRegistry sessionRegistry)
.
Как мне получить экземпляр SessionRegistry, который мне нужно передать? Я не могу найти способ создать идентификатор псевдонима для него или как получить его идентификатор или имя.