Spring 4/BcryptPasswordEncoder

Spring BcryptPasswordEncoder example

Soul-Learner 2016. 5. 17. 17:55

Spring에서 이용자 정보를 저장할 때 BcryptPasswordEncoder 를 사용하여 암호화하는 예



서블릿 설정파일에 BcryptPasswordEncoder 를 빈으로 등록하고 필요한 클래스 내에서 @Autowired으로 사용하는 예


서블릿 설정파일의 관련부분

	<beans:bean id="passwordEncoder"  
    		class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"  />


위에서 빈으로 설정된 passwordEncoder를 자바코드에서 사용하는 예

package org.kdea.bcrypt;

import org.json.simple.JSONObject;
import org.springframework.beans.factory.annotation.*;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.*;

@Service
public class UserAuthService 
{
	@Autowired
	UserAuthDAO dao;
	
	@Autowired
	BCryptPasswordEncoder passwordEncoder; //서블릿 설정파일에 빈으로 등록
	
	public String add(UserAuthVO user) 
	{
		// 이용자의 비밀번호를 bcrypt 알고리듬으로 암호화하여 DB에 저장한다
		String encodedPwd = passwordEncoder.encode(user.getPwd());

		user.setPwd(encodedPwd);
		user.setEnabled('1');
		user.setAuthority("USER");
		boolean added = dao.add(user);
		
		JSONObject jsObj = new JSONObject();
		jsObj.put("ok", added);
		jsObj.put("pwd", encodedPwd);
		return jsObj.toJSONString();
	}

	public String login(UserAuthVO user) {
		UserAuthVO db = dao.getUser(user);

		// 이용자가 로그인할 때 평문 비밀번호와 암호화된 비밀번호를 이용하여 비교한다
		boolean found = passwordEncoder.matches(user.getPwd(), db.getPwd());

		JSONObject jsObj = new JSONObject();
		jsObj.put("ok", found);
		return jsObj.toJSONString();
	}

}