Как отключить Spring Boot Encoder - PullRequest
       10

Как отключить Spring Boot Encoder

0 голосов
/ 09 апреля 2020

Мне нужно отключить кодировщик в моем загрузочном проекте Spring. Это кажется простым - просто удалите методы и переменные, но затем я получаю сообщение об ошибке:

Нет никакого PasswordEncoder, сопоставленного для идентификатора "null"

Теперь у меня есть жестко запрограммированный логин и (закодированный) пароль в моей базе данных. Пароль хранится как много литералов и цифр, и в слове пароля это означает «123», и мне нужно, чтобы пароль был «123» в базе данных. Вот мой код:

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Autowired
    UserDetailsServiceImpl userDetailsService;
    @Bean
    public BCryptPasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {

        auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {


        http.csrf().disable();
        http.authorizeRequests().
                antMatchers("/", "/login", "/logout", "productPage", "contactsPage", "/register", "/add_person").permitAll();
        http.authorizeRequests().
                antMatchers("/admin","/view_person")
                .access("hasAnyRole('ROLE_ADMIN', 'ROLE_SUPER_ADMIN')");
        http.authorizeRequests().
                and().exceptionHandling().accessDeniedPage("/403");
        http.authorizeRequests().and().formLogin()//
                .loginProcessingUrl("/j_spring_security_check")
                .loginPage("/login")//
                .defaultSuccessUrl("/productPage")//
                .failureUrl("/login?error=true")//
                .usernameParameter("username")//
                .passwordParameter("password")
                .and().logout().logoutUrl("/logout").logoutSuccessUrl("/logoutSuccessful")
                 .and().rememberMe().key("secret").tokenValiditySeconds(500000);

    }
}


@Service
public class UserDetailsServiceImpl implements UserDetailsService {

    @Autowired
    private AppUserDao appUserDAO;

    @Autowired
    private AppRoleDao appRoleDAO;


    @Override
    public UserDetails loadUserByUsername(String name)  {
        AppUser appUser = this.appUserDAO.findUserAccount(name);

        if (appUser == null) {
            System.out.println("User not found! " + name);
            throw new UsernameNotFoundException("User " + name + " was not found in the database");
        }

        System.out.println("Found User: " + appUser);

        List<String> roleNames = this.appRoleDAO.getRoleNames(appUser.getId());

        List<GrantedAuthority> grantList = new ArrayList<>();
        if (roleNames != null) {
            for (String role : roleNames) {
                GrantedAuthority authority = new SimpleGrantedAuthority(role);
                grantList.add(authority);
            }
        }

        UserDetails userDetails = new User(appUser.getName(),
                appUser.getPassword(), grantList);

        return userDetails;
    }
}

Я могу дать любые другие классы, если это необходимо

1 Ответ

1 голос
/ 10 апреля 2020

Вместо вашего BCryptPassworencoder используйте следующее (хотя это абсолютно не рекомендуется для производства). Это не будет sh вводом вашего пароля, а это то, что вы, похоже, хотите.

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new NoOpPasswordEncoder.getInstance();
    }
...