Я создаю веб-приложение, используя Stripes и Spring. Он должен иметь функцию входа в систему / аутентификации. Прямо сейчас я храню информацию о пользователе отдельно от учетных данных пользователя в базе данных. Моя модель User не содержит учетных данных, так как я не хочу передавать ценные пароли.
Spring управляет всеми моими DAO.
Сейчас я внедряю неконтейнерную систему безопасности. Я храню хэш-пароль sha-2 и сравниваю пароль, который был представлен в форме, с тем, что хранится в базе данных. Это сравнение было проверено и работает. Я пытаюсь выяснить, как соединить эту вещь вместе. Прямо сейчас у меня есть LoginActionBean, который перехватывает запросы на вход в систему и использует синглтон PasswordService, который использует UserDAO для извлечения учетных данных и сравнения их параметров. Моя фасоль:
<bean id="passwordSerivce" class="com.example.store.authentication.PasswordService" factory-method="getInstance">
<property name="userDAO" ref="userDAO"/>
</bean>
Но тогда синглтон PasswordService нуждается в:
public void setUserDAO(UserDAO userDAO) { ...}
метод, который на самом деле не имеет смысла в синглтоне (UserDAO - это интерфейс).
Я ищу правильный дизайн. Я читал, что ServiceLocators - это та самая причина, по которой Spring был изобретен. Есть мысли?
Я также хотел бы знать, как еще я могу создать это. У меня есть ActionBean, который вызывается, когда пользователь нажимает «Войти», но как мне на самом деле пройти аутентификацию. Внедрить ли сервис аутентификации в компонент? Создаю ли я синглтон, который каждый может назвать? Есть ли у меня общий интерфейс, который LoginAcionBean использует, который внедряет Spring? Если бы я не использовал Spring, как бы это было сделано?