본문 바로가기
Java

Http Get 요청 - 인증된 사용자만 세션키 받아오기

by code2772 2023. 9. 9.

[ 목차 ]

    728x90
    반응형

    서버와 통신하기 위해 만들었다 HttpURLConnection을 이용하여 통신하였으며, GET method를 이용하여 올바른 사용자 이름과 비밀번호를 제공해야 sessionKey를 할당 받게 만들었다. 간단한 권한 부여를 만들기 위해 예를 든 내용이기 때문에 실제 환경에서는 더 강력한 인증, 권한을 부여해줘야 한다. 또한 여기에서는 자바만이 보여지는데 실제로는 DB를 사용해서 정보를 저장해야한다.
     

    전체코드

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import org.json.JSONException;
    import org.json.JSONObject;
    
    public class Main {
    
        private String sessionKey;
        private String username; // 사용자 이름 (임의의 값)
        private String password; // 비밀번호 (임의의 값)
    
        public Main() {
            this.sessionKey = null;
            this.username = "exampleUser"; // 사용자 이름 설정
            this.password = "examplePassword"; // 비밀번호 설정
        }
    
        public String getSessionKey() {
            // 인증 확인
            if (authenticateUser(username, password)) {
                String apiUrl = "http://<서버 주소>:<포트번호>/sequence/select?sequence=1&responseType=json";
    
                try {
                    URL url = new URL(apiUrl);
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    
                    // HTTP GET 요청 설정
                    connection.setRequestMethod("GET");
                    connection.setConnectTimeout(5000); // 연결 타임아웃 5초 설정
                    connection.setReadTimeout(5000); // 읽기 타임아웃 5초 설정
    
                    int responseCode = connection.getResponseCode(); // 응답 코드 확인
    
                    if (responseCode == HttpURLConnection.HTTP_OK) {
                        // 응답이 성공
                        BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                        StringBuilder response = new StringBuilder();
                        String line;
                        while ((line = reader.readLine()) != null) {
                            response.append(line);
                        }
                        reader.close();
    
                        String responseBody = response.toString();
                        sessionKey = extractSessionKey(responseBody);
                    } else {
                        // 응답이 실패
                        System.err.println("HTTP Request Failed with Response Code: " + responseCode);
                    }
    
                    connection.disconnect();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } else {
                System.err.println("Authentication Failed.");
            }
    
            return sessionKey;
        }
    
        public boolean authenticateUser(String username, String password) {
            // 사용자 인증 로직
            // 여기에서는 간단한 예제로 고정된 사용자 이름과 비밀번호를 확인합니다.
            // 실제로는 사용자 데이터베이스나 인증 서비스를 사용해야 합니다.
            return "exampleUser".equals(username) && "examplePassword".equals(password);
        }
    
        public String extractSessionKey(String responseBody) {
            try {
                JSONObject json = new JSONObject(responseBody);
                JSONObject sessionObject = json.getJSONObject("session");
                return sessionObject.getString("sessionKey");
            } catch (JSONException e) {
                e.printStackTrace();
            }
            return null;
        }
    
        public static void main(String[] args) {
            Main m = new Main();
            String sessionKey = m.getSessionKey();
    
            if (sessionKey != null) {
                System.out.println("Session Key: " + sessionKey);
            } else {
                System.err.println("Failed to retrieve session key.");
            }
        }
    }

     

    코드설명


    Main 클래스 정의
    이 클래스는 프로그램의 진입점이며, HTTP 요청을 보내고 세션 키를 추출하는 메인 로직을 포함합니다.


    멤버 변수
    sessionKey: 세션 키를 저장하는 문자열 변수.
    username: 사용자 이름을 저장하는 문자열 변수.
    password: 비밀번호를 저장하는 문자열 변수.


    Main 생성자
    클래스의 생성자에서 sessionKeyusernamepassword 변수를 초기화합니다. 여기서는 예시로 사용자 이름과 비밀번호를 하드코딩하여 설정합니다.


    getSessionKey() 메서드
    authenticateUser(username, password)를 호출하여 사용자 인증을 수행합니다.
    인증에 성공하면 서버로 HTTP GET 요청을 보내고, 응답을 처리하여 세션 키를 추출합니다.
    세션 키는 sessionKey 변수에 저장되며, 이를 반환합니다.


    authenticateUser() 메서드
    사용자 인증을 위한 메서드입니다.
    여기에서는 입력된 사용자 이름과 비밀번호가 예시로 설정한 값과 일치하는지 확인합니다.
    실제로는 사용자 데이터베이스 또는 인증 서비스와 상호작용하여 인증을 수행해야 합니다.


    extractSessionKey() 메서드
    HTTP 응답 본문에서 세션 키를 추출하는 메서드입니다.
    JSON 형식의 응답을 파싱하여 세션 키를 추출하고 반환합니다.


    main() 메서드
    프로그램의 진입점입니다.
    Main 클래스의 인스턴스를 생성하고 getSessionKey() 메서드를 호출하여 세션 키를 가져옵니다.
    세션 키가 유효한 경우, 세션 키를 출력합니다. 그렇지 않으면 실패 메시지를 출력합니다.
     

     

    반응형

    'Java' 카테고리의 다른 글

    자바 Map 인터페이스  (0) 2022.10.06