Форум программистов, компьютерный форум, киберфорум
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
4 / 4 / 4
Регистрация: 07.02.2008
Сообщений: 361

Востановление пароля юзера

08.12.2016, 15:06. Показов 3686. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
SpringMVC, Hibernate и тд.
Пытаюсь сделать восстановление пароля зарегистрированного юзера. В базе хранится пароль в виде хеша $2a$10$/74cmg7qU9RWH/zHtmMqUebKk9XV60ZlciSa7m733ADkoDrYtOy.2
Т.е. как я понял отправить его пользователю не могу, т.к. не могу перевести обратно в нормальный вид.
Поэтому на запрос от юзера на смену пароля отправляю ему на почту сылку типа
ttp://localhost:8080/acceptRememberPass?pass=$2a$10$/74cmg7qU9RWH/zHtmMqUebKk9XV60ZlciSa7m733ADkoDrYtOy.2&email=mail@mail.ru
Пройдя по которой он попадает в контролер, где я проверяю на соответствие в базе данному емейлу пароля. Если все ок, то выдаю страницу JSP на смену.
Правильно ли я делаю? Как лучше и правильно сделать?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.12.2016, 15:06
Ответы с готовыми решениями:

VBulletin Востановление пароля юзера
Добрый день! Подскажите пожалуйста, как перенастроить в vbulletin систему восстановления пароля. Сейчас порядок действий такой: ...

востановление пароля по мылу не проходит
Всем доброго времени суток. забыл пороль на введенное мыло ничего не пришло пришлось долго вспоминать после входа проверил...

Востановление забытого пароля или...
Доброго времени суток! Вчера пытался подключить DLE к MySQl и пробовал различные варианты. Слуайно изменил host localhost на 123.142 и...

15
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
08.12.2016, 15:34
Цитата Сообщение от werrt Посмотреть сообщение
Правильно ли я делаю?
нет. Зачем вы хеш старого пароля и меил отправляете в ссылке? Это security leak. На запрос о ресете пароля, генерируйте токен и шлите этот токен. Примерно так
http://localhost:8080/resetPas... jsdf234lkj
токен должен быть действительным короткое время.
После того как на jsp странице юзер введет новый пароль, шлите запрос на сервер с тем же токеном и выставляйте там новый пароль. После этого инвалидируйте\стирайте токен
1
4 / 4 / 4
Регистрация: 07.02.2008
Сообщений: 361
10.12.2016, 13:41  [ТС]
чет не очень понимаю как все это делается...
как я понял, поправьте если что...
1) нужно создать репозиторий токенов, я делаю бин и в базе соответсвующую таблицу
Java
1
2
3
4
5
6
@Bean
    public PersistentTokenRepository persistentTokenRepository(){
        JdbcTokenRepositoryImpl jdbcTokenRepository = new JdbcTokenRepositoryImpl();
        jdbcTokenRepository.setDataSource(dataSource);  // здесь внедрение моей базы данных
        return jdbcTokenRepository;
    }
2) далее где-нить по запросу востановления по емейлу:
*получаю пользователя по емейлу из базы.
*для этого пользователя создаю в токен
Java
1
 persistentTokenRepository.createNewToken(new PersistentRememberMeToken("username","series1","само значение  токен",date));
3) отправляю пользователю на почту ссылку типа http://localhost:8080/resetPas... =сам_токен

4) на контролере http://localhost:8080/resetPassword? ловлю токен, идентифицирую пользователя и выдаю страницу для смены пароля

так?
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
10.12.2016, 14:09
Цитата Сообщение от werrt Посмотреть сообщение
нужно создать репозиторий токенов
нет особой надобности. Токен можно добавить как поле в таблицу юзеров

Цитата Сообщение от werrt Посмотреть сообщение
далее где-нить по запросу востановления по емейлу
откуда у вас взялся PersistentRememberMeToken? Причем он тут?

Цитата Сообщение от werrt Посмотреть сообщение
на контролере http://localhost:8080/resetPassword? ловлю токен, идентифицирую пользователя и выдаю страницу для смены пароля
посылайте сразу на страницу. Контроллер в данном случае ненужен. На контроллер посылайте сабмит формы смены пароля.
0
4 / 4 / 4
Регистрация: 07.02.2008
Сообщений: 361
10.12.2016, 15:04  [ТС]
я думал это как то связано со спринговcким remember-me. Подскажи, плиз, что почитать?
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
10.12.2016, 15:54
werrt, не связан. Читать хз о чем там читать. Просто пойдите и посмотрите как везде работает сброс пароля.
0
4 / 4 / 4
Регистрация: 07.02.2008
Сообщений: 361
10.12.2016, 16:02  [ТС]
что то типа ?
http://www.liveinternet.ru/com... 386074372/
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
10.12.2016, 18:12
werrt, а вы как думаете? В этой статье есть хоть слово о несете пароля?
0
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
11.12.2016, 19:43
Лучший ответ Сообщение было отмечено werrt как решение

Решение

мы делали так:
- делается отельная таблица типа (id пользователя, токен, дата создания)
- был таск, который периодически чистил таблицу в соответствии со значением срока валидности токена
- при запросе сброса пароля пользователю на мыло высылалась ссылка тапа .../resetPassword?token=...
- на сервере по токену доставали запись из таблицы, проверяли время валидности и если все ок, то авторизовывали пользователя с ролью ROLE_RESET_PASSWORD, при этом пользователю доступна только страница сброса пароля, где он вводит новый и подтверждение
- после того как пользователь сабмитит новый пароль с подтверждением делается запрос на api типа .../newPassword, который тоже доступен только для ROLE_RESET_PASSWORD
- на сервере проверяется что пароль совпадает с подтверждением и пароль сохраняется для текущего пользователя
- на последнем шаге делается автоматическая авторизация пользователя с его правами учетной записи
1
4 / 4 / 4
Регистрация: 07.02.2008
Сообщений: 361
13.12.2016, 23:38  [ТС]
LeX, подскажи плиз как авторизовать вручную пользователя с нужной ролью
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
14.12.2016, 00:12
werrt, шаг авторизации можете смело пропустить и открыть страницу для всех. Это никак не повлияет не защиту.
0
4 / 4 / 4
Регистрация: 07.02.2008
Сообщений: 361
14.12.2016, 01:21  [ТС]
KEKCoGEN, ну на будущее всеже интересно, напримерп автоматическая авторизация по токену
я пытаюсь сделать так:
Java
1
2
3
4
 User user = userServices.getUserByName("test");
                 UsernamePasswordAuthenticationToken aut = new UsernamePasswordAuthenticationToken(user.getName(),
                user.getPassword());
       SecurityContextHolder.getContext().setAuthentication(aut);
но без третьего парамаетрв в конструткоре - user.getAuthorities() не проходит, а user.getAuthorities() у меня почему то равно NULL

------------------------------------------------------------------------------------------------------------

пытался делать как я понял фразу "
посылайте сразу на страницу. Контроллер в данном случае ненужен. На контроллер посылайте сабмит формы смены пароля"

по токену ....reset?token=dwkhddhwkdhwhdwodh/

Java
1
2
3
4
5
6
7
 @RequestMapping(value = "/reset", method = RequestMethod.GET)
       public ModelAndView  changePassword(HttpServletRequest request, HttpServletResponse response, Model model){
         ModelAndView  model = new  ModelAndView();
        modelAndView.addObject("user", new User());
        modelAndView.setViewName("resetPasswordPage");
         return model;
    }
Со страницы resetPasswordPage.jsp методом POST через субмит отправить новый пароль на котролер, но на контролере исчезает токен.
Чет я запутался совсем
0
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
14.12.2016, 09:12
werrt, делай как я описал, через временную авторизацию

Цитата Сообщение от werrt Посмотреть сообщение
но без третьего парамаетрв в конструткоре - user.getAuthorities() не проходит, а user.getAuthorities() у меня почему то равно NULL
это роли пользователя. если ролевая модель не описана - передавай пустой список или же, если есть роли, передавай список SimpleGrantedAuthority, которые создаваться должны через конструктор с 1 параметром - именем роли (на сколько я помню без префикса ROLE_, но могу ошибаться)
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
14.12.2016, 09:43
Цитата Сообщение от werrt Посмотреть сообщение
но на контролере исчезает токен.
Чет я запутался совсем
значит вы токен не передаете с формы.
0
4 / 4 / 4
Регистрация: 07.02.2008
Сообщений: 361
14.12.2016, 14:28  [ТС]
путем подбора получилось логинить пользователя так:
userDetailsService- моя имплементация.

Java
1
2
3
4
5
6
 UserDetails userDetails = userDetailsService.loadUserByUsername("test");
        Authentication authentication = new UsernamePasswordAuthenticationToken(
 userDetails,
 userDetails.getPassword(), 
 userDetails.getAuthorities());
        SecurityContextHolder.getContext().setAuthentication(authentication);
т.е сначало получаю имя пользователя по токену из БД. Потом авторизую и отдаю страницу смены пароля. Правильно так будет?
0
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
15.12.2016, 09:06
да, только про роли не забывай
пользователю, авторизованному по токену, нужно ограничивать права только на смену пароля
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.12.2016, 09:06
Помогаю со студенческими работами здесь

Восстановление пароля к QIP 2012
Нужно востановить пароль к QIP 2012, пароль сохранен в программе, она все время подключалась автоматически. А сегодня понадобилось...

После ввода логина\пароля, как отобразить задачи только залогиненного юзера, вместо всех задач всех юзеров?
Доброго дня. Прошу вашего внимания. Имеем: 1. Форма логина. 2. Таблица "Сотрудники", откуда берем ФИО в качестве логина и...

Насколько точно скрипт в примере определит IP адрес юзера, агент юзера?
вот собственно сам скрипт: <? $ip=false; if(isset($_SERVER) && $_SERVER!='127.0.0.1' &&...

Загрузка изображения для профиля юзера в одном контроллере с загрузкой данных юзера
Алгоритм таков: 1. При добавлении клиента необходимо загрузить фото 2. Загружаю 3. Заполняю данные 4. Жму Create 5. Изображение...

Как добавить в DirectoryEdit1.Text путь к папке юзера, если имя юзера кириллицей?
Делаю такDirectoryEdit1.Text:=GetEnvironmentVariable('USERPROFILE') выдает вопросительные знаки вместо кириллицы


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru