Ошибки входа в систему при весенней загрузке: закодированный пароль не похож на BCrypt - PullRequest
0 голосов
/ 29 июня 2018

Я запустил свой весенний загрузочный проект по идее, зарегистрируйтесь, и у меня возникнет проблема при входе в систему. Он перенаправлен на «localhost: 8080 / login? Error» и имеет следующую идею

Кодированный пароль не похож на BCrypt

Я искал ответ в stackoverflow и увидел эту ссылку . Но мне кажется, что это бесполезно, потому что моя конфигурация расширяет WebSecurityConfigurerAdapter, а не AuthorizationServerConfigurerAdapter. Мой класс настройки:

    @Configuration
    @EnableWebSecurity
    public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private WorkersRepository workersRepository;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
            .antMatchers("/submit").access("hasRole('WORKER')")
            .anyRequest().permitAll()
            .and()
            .formLogin()
            .loginPage("/login")
            .and()
            .logout()
            .logoutSuccessUrl("/")
            .and()
            .rememberMe()
            .tokenValiditySeconds(4838400)
            .key("workerKey");
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws         Exception {
    auth.userDetailsService(new UserDetailsService() {
        @Override
        public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
            Worker worker = workersRepository.findByUsername(username);
            return workersRepository.findByUsername(username);
        }
    }).passwordEncoder(new BCryptPasswordEncoder()).and()
    .inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder())
    .withUser("admin").password("123456").roles("ADMIN","WORKER");
    }
}

Мой рабочий класс

@Entity
public class Worker implements UserDetails {

    private static final long serialversionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @NotNull
    @Size(min = 5, max = 16, message = "{username.size}")
    private String username;
    @NotNull
    @Size(min = 2, max = 30, message = "{firstName.size}")
    private String firstname;
    @NotNull
    @Size(min = 2, max = 30, message = "{lastName.size")
    private String lastname;
    @NotNull
    @Size(min = 5, max = 25,message = "{password.size}")
    private String password;
    @NotNull
    @Size(min = 2, max = 30, message = "{profession,size}")
    private String profession;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getFirstname() {
        return firstname;
    }

    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }

    public String getLastname() {
        return lastname;
    }

    public void setLastname(String lastname) {
        this.lastname = lastname;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getProfession() {
        return profession;
    }

    public void setProfession(String profession) {
        this.profession = profession;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    //UserDetails methods


    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return Arrays.asList(new SimpleGrantedAuthority("WORKER"));
    }

    @Override
    public boolean isAccountNonExpired() {
        return true;
    }

    @Override
    public boolean isAccountNonLocked() {
        return true;
    }

    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }

    @Override
    public boolean isEnabled() {
        return true;
    }
}

Мой рабочий репозиторий равен

package com.rieunity.workinghours;

import org.springframework.data.jpa.repository.JpaRepository;

public interface WorkersRepository extends JpaRepository<Worker, String> {
    Worker findByUsername(String username);
}

Я не авторизовался под именем пользователя admin, зарегистрировал нового пользователя в register.html и преуспел. Затем я захожу на страницу авторизации и не смог с ошибкой:

Кодированный пароль не похож на BCrypt

Я что-то пропустил?

Ответы [ 4 ]

0 голосов
/ 10 июля 2018

Я ответил в другом подобном посте, вы можете попробовать один раз:

Кодированный пароль не похож на BCrypt

0 голосов
/ 29 июня 2018

У меня была та же проблема, и решение простое, сначала откройте онлайн-страницу Bcrypt ecrypter в браузере: https://www.dailycred.com/article/bcrypt-calculator и сначала попробуйте здесь. Java по умолчанию использует 12 раундов в Brcypt. Вы должны использовать 12! не другое число.

0 голосов
/ 02 июля 2018

Я решил проблему. Поскольку я закодировал пароль с помощью BCryptPasswordEncoder, я должен сохранить пароль в этой форме. Следовательно, решение добавляет

String encodedPassword = new BCryptPasswordEncoder().encode(worker.getPassword());
worker.setPassword(encodedPassword);

в почтовый запрос "/ register"

@RequestMapping(value = "/register", method = RequestMethod.POST)
public String registrationProcessing(@Valid Worker worker, Errors errors, RedirectAttributes model) {
    if(errors.hasErrors()) {
        return "registerForm";
    };
    String encodedPassword = new BCryptPasswordEncoder().encode(worker.getPassword());
    worker.setPassword(encodedPassword);
    workersRepository.save(worker);
    model.addAttribute("username", worker.getUsername());
    model.addFlashAttribute("worker", worker);
    return "redirect:/";
}
0 голосов
/ 29 июня 2018

Поле пароля для BCrypt должно быть не менее 60 символов, поскольку результирующий хэш имеет 60 символов.

 @Size(min = 5, max = 60,message = "{password.size}")
 private String password;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...