Spring MVC BCryptPasswordEncoder проблема - PullRequest
0 голосов
/ 24 мая 2018

У меня в проекте есть ситуация «поймать 22», которую я не знаю, как решить.Это приложение создано на Spring MVC, где, как администратор, я могу создавать / обновлять пользователей.Теперь я использую BCryptPasswordEncoder для шифрования пароля созданного пользователя, который хранится в БД MySql.

Теперь проблема в том, что мы не можем декодировать зашифрованный пароль, зашифрованный с помощью BCryptPasswordEncoder.Напримертеперь я создал пользователя с паролем, скажем "SpringMVC @ #" после нажатия кнопки сохранения он зашифровывается кодировщиком, он становится примерно таким: "$ 2a $ 10 $ Cjcstw1UKZstCA19NiF4mOGMHMEMFojNozW5fH7qZ5RJ7Atz24I iss" 606G "isg6zполукоксовая сольТеперь я не могу расшифровать это значение и отобразить его как *************** (эквивалент SpringMVC @ # ) в поле пароля при обновлении.экран пользователя, вызывающий серьезную проблему.

При создании пользователя я вхожу в следующие поля: Имя пользователя, Пароль, Роль, Активный индикатор (это выпадающий список со значениями Y или N)

enter image description here

Теперь проблема заключается в том, что когда я перехожу на экран обновления, чтобы обновить сведения о пользователе, значение пароля выбирается из БД и отображается следующим образом:

enter image description here

Показанный здесь пароль на самом деле является зашифрованным / засоленным паролем длиной 60 символов, который выбирается из БД.Теперь проблема в том, что когда я обновляю одно поле (скажем, Роль) и нажимаю Отправить , он также обновляет пароль (который уже зашифрован) с двойным шифрованием, то есть значение снова засоляется и обновляется.И нет никакого способа узнать, какое значение хранится в БД после обновления.Поэтому, когда этот пользователь пытается снова войти в приложение, он не может указать, что его учетные данные неверны.

Вот код моего SecurityConfig.java файла, который расширяет WebSecurityConfigurerAdapter

 @Autowired
  DBAuthenticationService DBAauthenticationService;

 @Autowired
  public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
     auth.userDetailsService(dbAauthenticationService).passwordEncoder(passwordEncoder());

  }
  @Bean
  public PasswordEncoder passwordEncoder() {
    PasswordEncoder encoder = new BCryptPasswordEncoder();
    return encoder;
  }

Вот фрагмент кода из UserController.java:

@RequestMapping(value = "/saveUser", method = RequestMethod.POST)
  public ModelAndView saveUsersData(@ModelAttribute @Valid USerModel model, BindingResult result) {
    if (!result.hasErrors()) {
      try {
        String roleUser = model.getUserRole();
        model.setPassWord(pwEncode.encode(model.getPassWord()));
        userDao.saveUsersData(model, getUserId(), roleUser);
        userDao.setIsNewRecord(false);
        return new ModelAndView("redirect:/userListPage");
      } catch (Exception ex) {
        //print 
      }
    }
    return new ModelAndView("addUser");
  }

Теперь мои запросы:

1) В любом случае я могу декодировать зашифрованный пароль БД?ИЛИ ЖЕ2) Есть ли другой способ обойти эту проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...