Spring boot Security 비밀번호 비교
2024. 8. 15. 21:45ㆍJava/Spring Boot Security
중요한 것은 DB에 저장되는 암호화된 값과 입력받은 값을 암호화하는 암호화 방식이 동일해야 함
DaoAuthenticationProvider에서 비밀번호 비교가 이루어짐
확인하기 위해서 커스텀 객체를 생성하여 환경설정에 추가
환경설정 파일
@Autowired
private MemberUserDetailService memberUserDetailService;
@Bean
public DaoAuthenticationProvider authProvider() {
CustomAuthenticationProvider authProvider = new CustomAuthenticationProvider();
authProvider.setUserDetailsService(memberUserDetailService);
# PasswordEncoder를 설정하면, 기존에 등록된 비밀번호들에 대해서 무조건 false 나옴
//authProvider.setPasswordEncoder(new BCryptPasswordEncoder());
return authProvider;
}
커스텀 파일
public class CustomAuthenticationProvider extends DaoAuthenticationProvider {
@Autowired
private MemberMapper memberMapper;
@Override
public Authentication authenticate(Authentication auth) throws AuthenticationException {
Member member = memberMapper.getMember(auth.getName());
if(member == null) {
throw new BadCredentialsException("Invalid username and password.");
} else {
# 값이 절대 일치하지 않음
log.debug(this.getPasswordEncoder().encode((CharSequence)auth.getCredentials()));
log.debug(member.getPasswd());
# '(CharSequence)auth.getCredentials()'일 경우에 match에서 일치함
if(this.getPasswordEncoder().matches((CharSequence)auth.getCredentials(), member.getPasswd())) {
# 결과값: false;
log.debug(Boolean.toString(auth.isAuthenticated()));
} else {
throw new BadCredentialsException("Invalid username and password.");
}
}
Authentication result = super.authenticate(auth);
# 결과값: true
log.debug(Boolean.toString(result.isAuthenticated()));
return new UsernamePasswordAuthenticationToken(member, result.getCredentials(), result.getAuthorities());
}
'Java > Spring Boot Security' 카테고리의 다른 글
Spring boot Security logout 호출 (0) | 2024.08.25 |
---|---|
Spring boot Security 2FA OTP 적용 (0) | 2024.08.19 |
Spring boot Security 에러 메세지 처리 (0) | 2024.08.15 |
Spring boot Security Authentication 데이터 내용 (0) | 2024.08.15 |
Spring boot Security 객체 참조 (0) | 2024.08.13 |