Пароль, сохраненный в Spring Boot, bcrypt не совпадает с введенным необработанным паролем

tibco спросил: 03 ноября 2018 в 08:27 в: java

Я использую mongodb для хранения своих паролей bcrypt, проблема в том, что сохраненный пароль bcrypt не совпадает с необработанным паролем, который я использовал, когда я сопоставляю его с онлайн-инструментами, что выдает мне неверную учетную ошибку при входе в систему.

My SecurityConfig.java

//security configuration class for implementing spring security on urls
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {    @Autowired
    private CustomUserDetailsService userDetailsService;
    //for handling user success handler
    @Autowired
    private CustomizeAuthenticationSuccessHandler customizeAuthenticationSuccessHandler;
    @Override
    //this configuration is for handling user requests
    protected void configure(HttpSecurity http)  {
         try {
            http
                .authorizeRequests()
                .antMatchers("/orders").permitAll()
                .antMatchers("/createrole").permitAll()
                     .antMatchers("/login").permitAll()
                     .antMatchers("/admin/**").hasAuthority("admin")
                     .antMatchers("/agent/**").hasAuthority("agent")
                     .antMatchers("/distributor/**").hasAuthority("distributor")
                     .antMatchers("/home/**").hasAuthority("user").anyRequest()
                    .authenticated().and().csrf().disable().formLogin().successHandler(customizeAuthenticationSuccessHandler)
                    .loginPage("/login").failureUrl("/login?error=true")
                    .usernameParameter("username")
                    .passwordParameter("password")
                    .and().logout()
                    .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
                    .logoutSuccessUrl("/logout.done").deleteCookies("JSESSIONID")
                    .invalidateHttpSession(true) 
                    .logoutSuccessUrl("/login").and().exceptionHandling().accessDeniedPage("/403");            http.sessionManagement( ).maximumSessions(1).sessionRegistry( sessionRegistry( ) );
            http.sessionManagement( ).sessionFixation( ).migrateSession( )
                    .sessionAuthenticationStrategy( registerSessionAuthStr( ) );
        } catch (Exception e) {
            // TODO Auto-generated catch block
            System.out.println("Exception here");
        }
    }    //this method allows static resources to be neglected by spring security
    @Override
    public void configure(WebSecurity web) throws Exception {
        web
            .ignoring()
            .antMatchers("/resources/**", "/static/**", "/css/**", "/js/**", "/images/**","/assets/**","/fonts/**","/dis/**","/vendor1/**");
    }    @Bean
    public BCryptPasswordEncoder passwordEncoder() {
        BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
        return bCryptPasswordEncoder;
    }     @Bean
     public SessionRegistry sessionRegistry( ) {
         SessionRegistry sessionRegistry = new SessionRegistryImpl( );
         return sessionRegistry;
     }     @Bean
     public RegisterSessionAuthenticationStrategy registerSessionAuthStr( ) {
         return new RegisterSessionAuthenticationStrategy( sessionRegistry( ) );
     }    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth)  {
         //BCryptPasswordEncoder encoder = passwordEncoder();
        //auth.inMemoryAuthentication().withUser("logan@yahoo.com").password(encoder.encode("admin")).roles("user");
    try {
        auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
    } catch (Exception e) {        System.out.println("Login Failed");
    }
}}

CustomUserDetails Service.java

@Service
public class CustomUserDetailsService implements UserDetailsService{
    @Autowired
    private UserServiceImpl userservice;    @Autowired
    private RoleServiceImpl roleservice;    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        // TODO Auto-generated method stub
        User user=userservice.getUserByusername(username);            if(user != null) {
                List<GrantedAuthority> authorities = getUserAuthority(user.getRoles());
                return buildUserForAuthentication(user, authorities);
            } else {
                throw new UsernameNotFoundException("username not found");
            }    }    private List<GrantedAuthority> getUserAuthority(Set<Role> userRoles) {
        Set<GrantedAuthority> roles = new HashSet<>();
        userRoles.forEach((role) -> {
            roles.add(new SimpleGrantedAuthority(role.getRole()));
        });        List<GrantedAuthority> grantedAuthorities = new ArrayList<>(roles);
        return grantedAuthorities;
    }    private UserDetails buildUserForAuthentication(User user, List<GrantedAuthority> authorities) {
        return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), authorities);
    }}

UseServiceImpl для сохранения пользователя

@Autowired
private BCryptPasswordEncoder bCryptPasswordEncoder;    @Override
        public User saveUser(User User) {
         User.setPassword(bCryptPasswordEncoder.encode(User.getPassword()));
            //User.setEnabled(true);
            //Role userRole = roleservice.findrole("user");
            //User.setRoles(new HashSet<>(Arrays.asList(userRole)));        return userRepository.save(User);    }

Обработчик успеха пользовательской аутентификации

/*
 * This is an Authentication Success handler class for handling what happens after the user is suc
 * successfully logged in the application
 * 
 * 
 * 
 * */
@Component
@PropertySource("classpath:application.properties")
public class CustomizeAuthenticationSuccessHandler implements AuthenticationSuccessHandler {    @Value("${server.servlet.contextPath}")
    private  String path;
    @Override
    public void onAuthenticationSuccess(HttpServletRequest request,
            HttpServletResponse response, Authentication authentication)
            throws IOException, ServletException {
        //set our response to OK status
        response.setStatus(HttpServletResponse.SC_OK);
//this check granted authorities against the username
        for (GrantedAuthority auth : authentication.getAuthorities()) {
            //if the granted authority is user then it is allowed            //if its admin it is allowed              if("user".equals(auth.getAuthority())) {
                response.sendRedirect(path+"/home");
            }            else if("distributor".equals(auth.getAuthority())) {
                response.sendRedirect(path+"/distributor/home");
            }            else if ("admin".equals(auth.getAuthority())) {
                    response.sendRedirect(path+"/admin/home");
                }
            else if ("agent".equals(auth.getAuthority())) {
                response.sendRedirect(path+"/agent/home");
            }
            //else it redirects to the 403 forbidden error
            else {
                response.sendRedirect(path+"/403");
            }
        }
    }
}

Я застрял в этой проблеме с неделей, раньше я думал, что это связано с тем, что предыдущий сеанс не был очищен, но эта проблема сохраняется даже после перезапуска сервера. Я перешел по ссылкам, в которых обсуждалась ситуация, но не смог найти точного ответа - Spring Boot Security: закодированный пароль не похож на BCrypt

Spring Boot Security: закодированный пароль не похож на BCrypt


0 ответов