2016-12-02 2 views
-1

Я использую весеннюю безопасность в веб-приложении на основе Java. Мне нужно создать экран смены пароля, где пользователь должен будет ввести старый пароль для подтверждения.Как сопоставить старый пароль при смене пароля весной?

Мне нужно проверить, соответствует ли старый пароль, введенный пользователем его старым паролем в db.

Как сделать это весной безопасности.

Ниже приведена конфигурация java для безопасности весны.

@Configuration 
@EnableWebSecurity 
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true) 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 

    @Autowired 
    private UserDetailsService userDetailsService; 

    @Autowired 
    private AccessDecisionManager accessDecisionManager; 

    @Bean 
    @Autowired 
    public AccessDecisionManager accessDecisionManager(AccessDecisionVoterImpl accessDecisionVoter) { 
     List<AccessDecisionVoter<?>> accessDecisionVoters = new ArrayList<AccessDecisionVoter<?>>(); 
     accessDecisionVoters.add(new WebExpressionVoter()); 
     accessDecisionVoters.add(new AuthenticatedVoter()); 
     accessDecisionVoters.add(accessDecisionVoter); 
     UnanimousBased accessDecisionManager = new UnanimousBased(accessDecisionVoters); 
     return accessDecisionManager; 
    } 

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

    @Bean 
    public PasswordEncoder passwordEncoder(){ 
     PasswordEncoder passwordEncoder = new PasswordEncoder(); 
     passwordEncoder.setStringDigester(stringDigester()); 
     return passwordEncoder; 
    } 

    @Bean 
    public PooledStringDigester stringDigester() { 
     PooledStringDigester psd = new PooledStringDigester(); 

     psd.setPoolSize(2); 
     psd.setAlgorithm("SHA-256"); 
     psd.setIterations(1000); 
     psd.setSaltSizeBytes(16); 
     psd.setSaltGenerator(randomSaltGenerator()); 

     return psd; 
    } 

    @Bean 
    public RandomSaltGenerator randomSaltGenerator() { 
     RandomSaltGenerator randomSaltGenerator = new RandomSaltGenerator(); 
     return randomSaltGenerator; 
    } 

Кроме того, когда новый пользователь создан, я задал его пароль, как показано ниже.

user.setPassword(passwordUtils.encryptUserPassword(user.getPassword())); 


@Component("passwordUtil") 
public class PasswordUtils { 

    @Autowired 
    private PooledStringDigester _stringDigester; 

    public String encryptUserPassword(String originalPassword) { 
     String encryptedPassword = _stringDigester.digest(originalPassword); 
     return encryptedPassword; 
    } 
} 

ответ

1

Опросить Пароль хранится в БД с помощью Id Имя пользователя/Email/пользователя и, наконец, написать функцию в PasswordUtils, которая использует PooledStringDigester.matches

public boolean isPasswordsMatch(String newPassword, String passwordFromDb) { 
    return _stringDigester.matches(newPassword, passwordFromDb); 
}