728x90

Spring Security로 로그인을 구현할 때

기본 password는 BCryptPasswordEncoder 를 사용한다.

mysql의 password() 를 사용하여 password를 저장하는 경우에는 맞지 않기 때문에

MysqlPasswordEncoder를 만들어 적용한다.

--------------------

import java.security.GeneralSecurityException;
import java.security.MessageDigest;
import org.springframework.security.crypto.password.PasswordEncoder;

public class MySqlPasswordEncoder implements PasswordEncoder {
    @Override
    public String encode(CharSequence rawPassword) {
        if (rawPassword == null) {
            throw new NullPointerException();
        }
        byte[] bpara = new byte[rawPassword.length()];
        byte[] rethash;
        int i;

        for (i = 0; i < rawPassword.length(); i++)
            bpara[i] = (byte) (rawPassword.charAt(i) & 0xff);

        try {
            MessageDigest sha1er = MessageDigest.getInstance("SHA1");
            rethash = sha1er.digest(bpara); // stage1
            rethash = sha1er.digest(rethash); // stage2
        } catch (GeneralSecurityException e) {
            throw new RuntimeException(e);
        }

        StringBuffer r = new StringBuffer(41);
        r.append("*");

        for (i = 0; i < rethash.length; i++) {
            String x = Integer.toHexString(rethash[i] & 0xff).toUpperCase();
            if (x.length() < 2) r.append("0"); r.append(x);
        }
        return r.toString();
    }

    @Override
    public boolean matches(CharSequence rawPassword, String encodedPassword) {
        if (encodedPassword == null || rawPassword == null) { return false; }
        if (!encodedPassword.equals(encode(rawPassword))) { return false; }
        return true;
    }
}

-------------------

사용방법 : UserServiceImpl 등 login 처리를 하는 class에서

    @Autowired
    private BCryptPasswordEncoder passwordEncoder;
    
    @Autowired
    private MySqlPasswordEncoder mysqlPasswordEncoder;
...

//user.setPassword(passwordEncoder.encode(registration.getPassword())); user.setPassword(mysqlPasswordEncoder.encode(registration.getPassword()));

 

기존에 사용하던 BCryptPasswordEncoder 대신 MysqlPasswordEncoder 를 사용하면 됨.

728x90
BLOG main image
"그게 뭐 어쨌다는 거냐?" 늘 누가 나에게 나에대한 말을할 때면 이말을 기억해라. by nobang

카테고리

nobang이야기 (1951)
Life With Gopro (7)
Life With Mini (79)
Diary (971)
너 그거 아니(do you know) (179)
난 그래 (159)
Study (290)
속지말자 (10)
Project (34)
Poem (15)
Song (0)
Photo (113)
낙서장 (45)
일정 (0)
C.A.P.i (2)
PodCast (0)
nobang (27)
고한친구들 (4)
recieve (0)
History (0)
android_app (2)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

Total :
Today : Yesterday :