Там нет PasswordEncoder сопоставленных для идентификатора "ноль" в базовой безопасности весной - PullRequest
0 голосов
/ 04 июня 2018

мой код работает нормально в весенней версии 1.5.6.Но когда я обновляю версию до 2.0.0, некоторые из моих методов устарели, но работают нормально.когда я изменяю свой устаревший метод, глядя из Там нет PasswordEncoder, сопоставленного для идентификатора "null" с аутентификацией базы данных , он начинает выдавать мне ошибку "нет пароля-кодера"

Вот мойкод.

WebConfig

@Configurable
@EnableWebSecurity
public class WebConfig extends WebSecurityConfigurerAdapter {

@Autowired
AppUserDetailsService appUserDetailsService;

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.userDetailsService(appUserDetailsService);
}

@Bean
public static DelegatingPasswordEncoder passwordEncoder() {
 return (DelegatingPasswordEncoder) DelegatingPasswordEncoder.encode("noop");
}

protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.userDetailsService(appUserDetailsService).passwordEncoder(passwordEncoder());
}

@Bean
public PasswordEncoder passwordEncoder() {
    return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}

@SuppressWarnings("deprecation")
@Bean
public WebMvcConfigurer corsConfigurer() {
    return new WebMvcConfigurerAdapter() {
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**").allowedOrigins("http://localhost:4200");

        }
    };
}
@Override
public void configure(WebSecurity web) throws Exception {
    super.configure(web);
}

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.cors().and()
    .authorizeRequests()
    .antMatchers("/account/register","/account/login","/logout").permitAll()
    .anyRequest().fullyAuthenticated().and()
    .logout()
    .permitAll()
    .logoutRequestMatcher(new AntPathRequestMatcher("/logout", "POST"))
    .and()
    .httpBasic().and()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED).and()
    .csrf().disable();
}

}

Контроллер учетных записей

@RestController
@RequestMapping("account")
public class AccountController {

public static final Logger logger = LoggerFactory.getLogger(AccountController.class);

@Autowired
private UserService userService;

@CrossOrigin
@RequestMapping(value = "/register", method = RequestMethod.POST)
public ResponseEntity<?> createUser(@RequestBody User newUser) {
    if (userService.find(newUser.getUsername()) != null) {
        logger.error("username Already exist " + newUser.getUsername());
        return new ResponseEntity(
                new CustomErrorType("user with username " + newUser.getUsername() + "already exist "),
                HttpStatus.CONFLICT);
    }
    newUser.setRole("USER");

    return new ResponseEntity<User>(userService.save(newUser), HttpStatus.CREATED);
}

@CrossOrigin
@RequestMapping("/login")
public Principal user(Principal principal) {
    logger.info("user logged "+principal);
    return principal;
}
}

Служба поддержки пользователей

@Service
public class UserService {

@Autowired
UserRepository userRepository;

public User save(User user) {
    return userRepository.saveAndFlush(user);
}

public User update(User user) {
    return userRepository.save(user);
}

public User find(String userName) {
    return userRepository.findOneByUsername(userName);
}
}

Я вижу все связанные ответы, но они доступны для аутентификации inMemory. Spring Security: миграция с 4.0 на 5.0 - Ошибка - Нет PasswordEncoder, сопоставленного для идентификатора «null» Spring Security 5: Нет PasswordEncoder, сопоставленного для идентификатора «null» Spring Boot PasswordEncoder Error

Пожалуйста, помогите.Я использую базу данных MySQL.

1 Ответ

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

Из документации:

NoOpPasswordEncoder: кодировщик паролей, который ничего не делает.Полезно для тестирования, где может быть предпочтительна работа с простыми текстовыми паролями.

Они устарели, поскольку не защищены.Как я вижу, если вы все еще хотите использовать кодировщик паролей noop, просто создайте свою собственную реализацию кодировщика паролей.

https://github.com/spring-projects/spring-security/blob/master/crypto/src/main/java/org/springframework/security/crypto/password/NoOpPasswordEncoder.java

Надеюсь, это поможет.

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