Задача: сделать аутентификацию при помощи сервлета через БД (использую JDBC, postgreSQL в качестве СУБД). создал таблицу, содержащие имена и пароли (пока открытым текстом, хотя по совести надо хеш-сумму там хранить вроде как). И создал класс User с полями name + password.
Схема такая. Сделал фильтр (называл AuthFilter), который просматривает url-pattern и проверяет, содержится ли в request.getSession().getAttibute(«user»). Если нет - перенаправляет на страницу логина.
На странице логина (примерно также на странице регистрации с небольшими изменениями) - пользователь вводит имя и пароль в форму, отправляет POST-запрос... его обрабатывает LoginServlet, и если всё плохо - пишет ошибку. Если всё хорошо - добавляет request.getSession().setAttribute(«user»,user) (или вместо целиком user можно просто username, разницы особой думаю нет. Всё работает как надо.
А теперь проблемы:
1) если tomcat перезапускать, httpSession пропадает и пользователю приходится заново логиниться (даже если он браузер не перезапускал). Можно это как-то пофиксить? я предполагаю, хранить сессию в БД? целиком объект request.getSession() туда пихать, или как-то проще?
2) открытым текстом не есть гуд, как мне проще всего реализовать хранение, например, подсоленной md5/sha-суммы? какой библиотекой воспользоваться, где взять этот алгоритм md5/sha1/sha256?
P.S. В Spring security всё это есть и работает замечательно, и очень просто делается =) в том числе можно выбирать алгоритм хеш-суммы. Но мне надо разобраться, как это сделать, используя только Servlets + JSP(JSTL) + JDBC
P.P.S. Если несмотря на то, что «всё работает», я допустил какую-то логическую ошибку в алгоритме - буду благодарен, если кто на неё укажет. :)
Спасибо.