반응형
AD에 있는 로그인 프로파일 가져오는 방법입니다.
SSO 성공 시 accessToken이 발급되며, 발급된 Token을 이용하여 프로파일 정보 접근 후 이미지 파일을 내려받는 소스입니다.
로그인 이후 프로파일 사진 다운로드
{
// 로그인 시점에서 전달된 accessToken 정보
final String accessToken = filteredClaims.get("accessToken");
TokenCredential tokenCredential = new TokenCredential() {
@Override
public Mono<AccessToken> getToken(TokenRequestContext tokenRequestContext) {
// 비동기적으로 AccessToken을 생성하고 반환하는 예제
return Mono.just(new AccessToken(accessToken, null));
}
};
TokenCredentialAuthProvider tokenCredentialAuthProvider = new TokenCredentialAuthProvider(tokenCredential);
// GraphServiceClient 생성
GraphServiceClient<Request> graphClient = GraphServiceClient.builder()
.authenticationProvider(tokenCredentialAuthProvider)
.buildClient();
// 사용자 프로필 정보 가져오기
User me = graphClient.me().buildRequest().get();
// 프로필 사진 가져오기
//ProfilePhoto profilePhoto = graphClient.users(me.id).photo().buildRequest().get();
// 프로필 사진 다운로드 및 저장
ProfilePhotoRequestBuilder profilePhotoRequestBuilder = graphClient.users(me.id).photo();
try {
String filePath = GlobalConfig.getInstance().getFilePath();
InputStream photoStream = profilePhotoRequestBuilder.content().buildRequest().get();
// 서버에 저장
savePhotoToFile(photoStream, filePath + "/photo", "profile_" + userId + ".jpg");
}catch(Exception e) {
Log.biz.debug("photo not found = {}", e);
}
}
이미지 파일 저장
/**
* 파일 저장
**/
private static void savePhotoToFile(InputStream inputStream, String dir, String fileName) throws IOException {
File fileDir = new File(dir);
if (!fileDir.exists())
fileDir.mkdirs();
File photoFile = new File(dir + "/" + fileName);
try (FileOutputStream outputStream = new FileOutputStream(photoFile)) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
}
}
반응형
'FullStack > 21. Java' 카테고리의 다른 글
WebDriver를 이용한 Robot 방지 우회 (0) | 2024.01.08 |
---|---|
ProviderManager, AuthenticationProvider 차이 (0) | 2023.11.23 |
Azure Active Directory SSO - 로그인 코드(2) (0) | 2023.09.29 |
Azure Active Directory SSO - 연동 준비(1) (0) | 2023.09.29 |
ResultSet의 setFetchSize 에 따른 성능 (0) | 2023.09.05 |