Team Project

[Spring] Spring Security๋ฅผ ํ™œ์šฉํ•œ ์†Œ์…œ ๋กœ๊ทธ์ธ (2/3)

ITs Min 2024. 4. 1.

๐Ÿ” UserRepository.java

package infinitystone.chalKag.biz.customOAuth2;

import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<UserEntity, String> {

    UserEntity findByEmail(String member_id);
}

 

์‚ฌ์šฉ์ž ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์‚ฌ์šฉ์ž ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.

์—ฌ๊ธฐ์„œ UserRepository ์ธํ„ฐํŽ˜์ด์Šค๋Š” JpaRepository๋ฅผ ํ™•์žฅํ•˜์—ฌ ์‚ฌ์šฉ์ž ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์ €์žฅํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์ƒ์†ํ•œ๋‹ค.

์ด ๊ฒฝ์šฐ, UserEntity ๊ฐ์ฒด์™€ ์—ฐ๊ด€๋œ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค.

ํ•ด๋‹น ์ฝ”๋“œ์—์„œ๋Š” ์‚ฌ์šฉ์ž ์ด๋ฉ”์ผ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉ์ž๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•œ ์ถ”๊ฐ€ ๋ฉ”์„œ๋“œ findByEmail(String member_id)๊ฐ€ ์ •์˜๋˜์–ด ์žˆ๋Š”๋ฐ member_id๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ•ด๋‹น ์œ ์ €์˜ ์ด๋ฉ”์„ ๊ฐ€์ ธ์˜จ๋‹ค.


๐Ÿ” OAuth2Response.java

package infinitystone.chalKag.biz.customOAuth2;

public interface OAuth2Response {

    //์ œ๊ณต์ž (Ex. naver, google, ...)
    String getProvider();
    
    //์ œ๊ณต์ž์—์„œ ๋ฐœ๊ธ‰ํ•ด์ฃผ๋Š” ์•„์ด๋””(๋ฒˆํ˜ธ)
    String getProviderId();
    
    //์ด๋ฉ”์ผ
    String getEmail();
    
    //์‚ฌ์šฉ์ž ์‹ค๋ช… (์„ค์ •ํ•œ ์ด๋ฆ„)
    String getName();
    
    //์‚ฌ์šฉ์ž ๋‹‰๋„ค์ž„
    String getNickname();
    
    //์‚ฌ์šฉ์ž ์ „ํ™”๋ฒˆํ˜ธ
    String getPh();
    
    //์‚ฌ์šฉ์ž ์„ฑ๋ณ„
    String getGender();
    
    //์‚ฌ์šฉ์ž ์ƒ์ผ
    String getBirthday();
    
    //์‚ฌ์šฉ์ž ์ถœ์ƒ์—ฐ๋„
    String getBirthYear();
    
}

 

์‚ฌ์šฉ์ž๊ฐ€ OAuth2๋ฅผ ํ†ตํ•ด ์ธ์ฆ๋œ ํ›„์— ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์ •์˜ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค. ์นด์นด์˜คํ†ก๊ณผ ๋„ค์ด๋ฒ„ ๊ตฌ๊ธ€์ด ์ œ๊ณตํ•˜๋Š” ์ •๋ณด๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ฐ๊ฐ์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค.


๐Ÿ” NaverResponse.java

package infinitystone.chalKag.biz.customOAuth2;

import java.util.Map;

public class KakaoResponse implements OAuth2Response {

	private final Map<String, Object> attribute;

	public KakaoResponse(Map<String, Object> attribute) {
		this.attribute = attribute;
	}


	@Override
	public String getProvider() {
		return "kakao";
	}

	@Override
	public String getProviderId() {
		return attribute.get("id").toString();
	}

	@Override
	public String getEmail() {
		return (String) ((Map<String, Object>) attribute.get("kakao_account")).get("email");
	}

	@Override
	public String getName() {
		return (String) ((Map<String, Object>) attribute.get("properties")).get("nickname");
	}

	@Override
	public String getNickname() {
		return (String) ((Map<String, Object>) attribute.get("properties")).get("nickname");
	}

	@Override
	public String getPh() {
		String originalNumber = (String) ((Map<String, Object>) attribute.get("kakao_account")).get("phone_number");
        String formattedNumber = formatPhoneNumber(originalNumber);
		return formattedNumber;
	}

	@Override
	public String getGender() {
		return (String) ((Map<String, Object>) attribute.get("kakao_account")).get("gender");
	}

	@Override
	public String getBirthday() {
		String originalBirthday = (String) ((Map<String, Object>) attribute.get("kakao_account")).get("birthday");
		String formattedBirthday = formatBirthday(originalBirthday);
		return formattedBirthday;
	}

	@Override
	public String getBirthYear() {
		return (String) ((Map<String, Object>) attribute.get("kakao_account")).get("birthyear")+"-";
	}
	
	 public static String formatPhoneNumber(String phoneNumber) {
	        // ์ „ํ™”๋ฒˆํ˜ธ์—์„œ ์ˆซ์ž๋งŒ ๋‚จ๊ธฐ๊ธฐ
	        String cleanedNumber = phoneNumber.replaceAll("[^0-9]", "");
	        // 010 ํ˜•์‹์œผ๋กœ ์žฌ๊ตฌ์„ฑ
	        String formattedNumber = "010" + cleanedNumber.substring(cleanedNumber.length() - 8);
	        return formattedNumber;
	    }
	 public static String formatBirthday(String birthday) {
	        // substring์„ ์‚ฌ์šฉํ•˜์—ฌ ์•ž์˜ ๋‘ ๋ฌธ์ž์™€ ๋’ค์˜ ๋‘ ๋ฌธ์ž๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ  ๊ทธ ์‚ฌ์ด์— "-"๋ฅผ ์‚ฝ์ž…
	        return birthday.substring(0, 2) + "-" + birthday.substring(2);
	    }
}

 

 

์œ„์— ์žˆ๋Š” OAuth2Response ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•œ ๋„ค์ด๋ฒ„ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ ํด๋ž˜์Šค์ด๋‹ค.

์—ฌ๊ธฐ์—์„œ๋Š” ๋„ค์ด๋ฒ„ ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ ๋ฐ›์•„์™€์„œ DB ์–‘์‹์— ๋งž๊ฒŒ ์ •์ œํ•œ ํ›„์— ์„œ๋น„์Šค๋กœ ๋ฆฌํ„ดํ•œ๋‹ค.

์นด์นด์˜คํ†ก๊ณผ ๊ตฌ๊ธ€๋„ ์ด๋Ÿฐ ์‹์œผ๋กœ ์ž‘์„ฑ๋˜์–ด ์žˆ๋‹ค.


 

๋Œ“๊ธ€

TOP

๋Šฆ์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•  ๋• ๋„ˆ๋ฌด ๋Šฆ์€ ๊ฑฐ๋‹ค.