프로그래밍/JAVA 131

[OAuth2 + JWT] 애플 로그인 구현(STEP 1)

단계는 애플 개발자 세팅 → 프론트엔드 세팅 → 백엔드 세팅 이렇게 진행해보려 한다.[개발 환경]Front : React Native Expo + WebViewBack : Spring Boot(Gradle, yml) + Spring Security, OAuth2.0, JWT  애플 개발자 콘솔에서 서비스 등록 방법 1. 애플 개발자 사이트 서비스 등록 페이지 들어가기https://developer.apple.com/account/resources/certificates/list 에 들어가 로그인 하기혹은 애플 개발자 사이트 검색해서 들어간 후 하단에 Certificates, IDs, & Profiles 눌러서 들어가기 이 과정에서 애플 계정, Apple Developer Program 등록을 위한 결제가..

[JAVA] 홈택스 인증서 로그인 다시 구현(업데이트 된 부분 반영)

몇 달 전 홈택스 공인 인증서 로그인 + 매입/매출 계산서 조회 부분을 구현했는데 11월 2일 홈택스 고도화 작업으로 인하여 api 등 꽤 많은 변경사항이 있었고 에러가 떴음 변경된 부분 파악하고 업데이트를 하기로 했음 크게 변경된 부분은 로그인을 위한 pkcEncSsn 을 가져오기 위한 API 통신을 할 때, 먼저 쿠키를 세팅해 주는 부분과기존에는 API 요청과 응답을 xml로 통신 했다면 json으로 바꼈다는 점 이를 염두해 두고 서비스 전체 코드를 수정함String getPkcEncSsnUrl = "https://www.hometax.go.kr/wqAction.do?actionId=ATXPPZXA001R01&screenId=UTXPPABA01";// pkcEncSsn, cookies 값 얻기Resp..

[Java] 홈택스 공동 인증서 로그인_3

마지막 단계인 공동 인증서 로그인 하기  API URL : https://www.hometax.go.kr/pubcLogin.do?domain=hometax.go.kr&mainSys=Y이전 페이지 들에서 가져왔던 값들을 header와 params에 세팅해주고 POST 메서드로 통신을 한 후 Response를 받아오기이 Response에는 전자 세금 계산서 조회에 필요한 TXPPsessionID가 들어있음 1. header 및 params 세팅앞서 설명한 내용대로 쿠키와 파라미터를 세팅해주기String url = "https://www.hometax.go.kr/pubcLogin.do?domain=hometax.go.kr&mainSys=Y";HttpHeaders headers = new HttpHeaders(..

[Java] 홈택스 공동 인증서 로그인_2

다음으로 쿠키 세팅과 파라미터 세팅을 해야함 1. 인증서 로그인에 필요한 쿠키를 세팅헤더세팅 값Content-Typeapplication/x-www-form-urlencoded; charset=UTF-8CookieWMONID, TXPPsessionID https://www.hometax.go.kr/wqAction.do?actionId=ATXPPZXA001R01&screenId=UTXPPABA01위의 API GET 요청을 통해 쿠키 정보를 가져와  WMONID, TXPPsessionID 정보를 세팅하고, 파마미터 세팅에 중요한 값인 Response에서 pkcEncSsn에 담긴 값을 가져옴 아래와 같이 Header 세팅을 해줌HttpHeaders headers = new HttpHeaders();header..

[Java Error] java.security.NoSuchProviderException: No such provider: BC

java.security.NoSuchProviderException: No such provider: BC 에러 원인과 해결 방법 원인 Cipher cipher = Cipher.getInstance("SEED/CBC/PKCS5Padding", "BC");위의 코드를 실행했더니 아래의 에러가 났음 먼저 코드를 살펴보자SEED 알고리즘은 java.security의 Provider에서 제공하지 않는 알고리즘이기에 org.bouncycastle 를 gradle에 추가해서 가져오려고 했음// gradleimplementation group: 'org.bouncycastle', name: 'bcprov-jdk18on', version: '1.77'implementation group: 'org.bouncycastl..

[Spring Error] java.lang.IllegalArgumentException: Invalid character found in the request target... 에러 해결 방법

java.lang.IllegalArgumentException: Invalid character found in the request target. 에러 프론트에서 파일명을 백엔드로 넘길 때 해당 에러가 발생 발생 원인 파일명에 특수 문자나 공백을 포함하고 있어서 에러 발생 해결 방법 파일명을 인코딩해서 서버로 보내기 예시 const data = encodeURI("home/dev/[20231201]샘플_첨부_파일.png");

[Java] ArrayList 맨 앞에 값 추가하기

ArrayList 맨 앞에 값 추가하기 addAll을 사용하여 0번째 인덱스에 값 추가 import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Sample { public static void main(String[] args) { List list1 = new ArrayList(Arrays.asList("3", "4")); List list2 = new ArrayList(Arrays.asList("1", "2")); // list 맨 앞에 값 추가 => 0번째 인덱스에 값 추가 list1.addAll(0, list2); // 결과 출력 System.out.println(list1); // [1, 2,..

[Java] Deprecated StringUtils.isEmpty 대체

StringUtils.isEmpty 대체 StringUtils.isEmpty가 deprecated 됨 hasLength, hasText로 대체해서 사용 가능 StringUtils.hasLength 문자열의 길이 확인 주어진 문자열이 null이 아니고 길이가 0보다 크면 true String str = "Hello, World!"; boolean hasLength = StringUtils.hasLength(str); StringUtils.hasText 문자열에 공백 문자를 제외한 실제 문자가 포함되어 있는지 확인 주어진 문자열이 null이 아니고 길이가 0보다 크며, 공백 문자를 제외한 문자가 포함되어 있으면 ture String str = " "; boolean hasText = StringUtils.h..

[Java] 자료형 비교

주소값 비교 (== 연산자) == 연산자는 두 개의 변수나 객체의 메모리 주소값을 비교 두 변수가 같은 객체를 참조할 때만 true를 반환하며, 객체의 내용이 같은지 여부와는 관계 없음 객체가 동일한 인스턴스인 경우에만 == 비교는 true를 반환 String str1 = new String("Hello"); String str2 = new String("Hello"); System.out.println(str1 == str2); // false (서로 다른 객체의 주소값을 비교) 값 비교 (equals 메서드) 두 객체의 내용이 같은지 비교 객체의 내용, 즉 데이터가 동일한 경우 true를 반환하며, 객체의 메모리 주소값과는 상관없음 equals 메서드는 일반적으로 클래스에서 재정의(override)되..