2011년 6월 9일 목요일

Java NetWork - 6

9. URLConnection
① package acdpu.pki.applet;
② import javax.swing.JApplet;
③ import java.awt.Dimension;
④ import java.awt.Toolkit;
⑤ import java.awt.BorderLayout;
⑥ import javax.swing.JFrame;
⑦ import javax.swing.UIManager;
⑧ import javax.swing.JLabel;
⑨ import java.awt.Rectangle;
⑩ import javax.swing.JPanel;
⑪ import javax.swing.BorderFactory;
⑫ import javax.swing.JScrollPane;
⑬ import javax.swing.JTextPane;
⑭ import javax.swing.JTextField;
⑮ import javax.swing.JButton;
16 import javax.swing.JPasswordField;
17 import java.awt.event.ActionListener;
18 import java.awt.event.ActionEvent;
19 import java.net.*;
20 import java.io.*;
21 import java.security.*;
22 import java.applet.*;
23
24 public class createPKIApplet extends JApplet {
25
26 // 객체 생성
27 private JLabel topLabel = new JLabel(); // 상단 라벨
28 private JScrollPane messageScrollPane = new JScrollPane(); // 하단 메시지창 스크롤
29 private JTextPane messageTextPane = new JTextPane(); // 하단 메시지창
30 private JTextField userid = new JTextField(); // 사용자 아이디 입력
31 private JPasswordField passwd = new JPasswordField(); // 사용자 암호 입력
32 private JButton submit = new JButton(); // 전송 버튼
33 private JButton reset = new JButton(); // 리셋
34 private JButton create = new JButton();
35 private JButton login = new JButton();
36
37 private final String serverIp = "10.60.34.202";
38 private final int serverPort = 8888;
39
40 public createPKIApplet() {
41 }
42
43 public void init() {
44
45 try {
46 jbInit();
47 } catch(Exception e) {
48 e.printStackTrace();
49 }
50 }
51
52 private void jbInit() throws Exception {
53 this.getContentPane().setLayout(null);
54 this.setSize(new Dimension(524, 397));
55
56 // 상단 라벨
57 topLabel.setText("인증키생성");
58 topLabel.setBounds(new Rectangle(0, 0, 525, 30));
59
60 // 사용자 아이디
61 userid.setBounds(new Rectangle(15, 35, 280, 65));
62 userid.setBorder(BorderFactory.createTitledBorder("UserId"));
63
64 // 사용자 암호
65 passwd.setBounds(new Rectangle(15, 115, 280, 60));
66 passwd.setBorder(BorderFactory.createTitledBorder("PassWord"));
67
68 // 전송 버튼
69 submit.setText("전송");
70 submit.setBounds(new Rectangle(85, 215, 125, 40));
71 submit.addActionListener(new ActionListener() {
72 public void actionPerformed(ActionEvent e) {
73 submit_actionPerformed(e);
74 }
75 });
76
77 // 리렛 버튼
78 reset.setText("재입력");
79 reset.setBounds(new Rectangle(305, 215, 125, 40));
80 reset.addActionListener(new createPKIApplet_reset_actionAdapter(this));
81 create.setText("인증서생성");
82 create.setBounds(new Rectangle(355, 40, 115, 40));
83 create.setActionCommand("create");
84 create.setEnabled(false);
85 login.setText("로그인");
86 login.setBounds(new Rectangle(355, 95, 115, 40));
87 login.setActionCommand("login");
88 login.addActionListener(new ActionListener() {
89 public void actionPerformed(ActionEvent e) {
90 login_actionPerformed(e);
91 }
92 });
93
94 // 스크롤 상자
95 messageScrollPane.setBounds(new Rectangle(10, 290, 505, 80));
96 messageScrollPane.setBorder(BorderFactory.createTitledBorder("Message"));
97 messageScrollPane.setAutoscrolls(true);
98
99 // 메시지 창
100 messageTextPane.setText("인증 서버연결 준비중...");
101 messageTextPane.setEditable(false);
102 messageScrollPane.getViewport().add(messageTextPane, null);
103
104 this.getContentPane().add(login, null);
105 this.getContentPane().add(create, null);
106 this.getContentPane().add(passwd, null);
107 this.getContentPane().add(reset, null);
108 this.getContentPane().add(submit, null);
109 this.getContentPane().add(userid, null);
110 this.getContentPane().add(messageScrollPane, null);
111 this.getContentPane().add(topLabel, null);
112 }
113
114 static {
115 try {
116 // UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
117 // UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
118 } catch(Exception e) {
119 }
120 }
121
122 void reset_actionPerformed(ActionEvent e) {
123 userid.setText("");
124 passwd.setText("");
125 userid.setEditable(true);
126 passwd.setEditable(true);
127 setMessage("입력 창이 초기화 되었습니다.");
128 }
129
130 private void setMessage(String message) {
131 messageTextPane.setText(messageTextPane.getText()+"\n"+message);
132 }
133
134 private void submit_actionPerformed(ActionEvent e) {
135 userid.setEditable(false);
136 passwd.setEditable(false);
137 String userEnterText = userid.getText();
138 String passEnterText = new String(passwd.getPassword());
139 setMessage("인증서버에 접속중입니다.... ");
140
141 try{
142 URL url = new URL("http",
143 serverIp,
144 serverPort,
145 "/createpki?userid="+userEnterText+
146 "&passwd="+passEnterText);
147 URLConnection urlcon = url.openConnection();
148 String contentType = urlcon.getContentType();
149
150 // 테스트 출력
151 //setMessage(contentType);
152
153 InputStream in = urlcon.getInputStream();
154
155 if(contentType.equalsIgnoreCase("text/html;euc-kr")) {
156 // 인증서가 정상적으로 발급되지 않은 경우 실행
157 BufferedReader inre = new BufferedReader(
158 new InputStreamReader(
159 in));
160 setMessage("ERROR) : 다음과 같은 에러가 발생하였습니다.");
161 String errorMessage = inre.readLine();
162
163 if(errorMessage.equals("1"))
164 setMessage("인증성 생성에 실패 하였습니다.");
165 else if(errorMessage.equals("2"))
166 setMessage("사용자가 틀림니다. 아이디와 비밀번호를 확인해 주십시요.");
167 else if(errorMessage.equals("3"))
168 setMessage("사용기간이 지났거나 시작되지 않았습니다.");
169 else
170 setMessage("인증서버 접속에 실패하였습니다. 관리자에 문의하십시요.");
171 in.close();
172
173 } else {
174 // 인증서 클라이언트 PC에 저장
175 String filePath = "C:/peace";
176 File file = new File(filePath);
177 if(!file.exists()){
178 file.mkdir();
179 }
180 ObjectInputStream obin = new ObjectInputStream(in);
181 PrivateKey privatekey = (PrivateKey)obin.readObject();
182 ObjectOutputStream out = new ObjectOutputStream(
183 new FileOutputStream(
184 new File(
185 file,
186 userEnterText+"PRI.ser")));
187 out.writeObject(privatekey);
188 obin.close();
189 in.close();
190 out.close();
191 setMessage("인증키 발급이 성공되었습니다. 다음과 위치에 인증키가 저장되었습니다.");
192 setMessage(filePath+"/"+userEnterText+"PRI.ser");
193 }
194 } catch (MalformedURLException mfurle) {
195 setMessage(mfurle.getMessage());
196 } catch (IOException ioe) {
197 setMessage(ioe.getMessage());
198 } catch (ClassNotFoundException cnote) {
199 setMessage(cnote.getMessage());
200 }
201 }
202
203 private void login_actionPerformed(ActionEvent e) {
204 try{
205 AppletContext cont = getAppletContext();
206 cont.showDocument(
207 new URL("http://"+serverIp+":"+serverPort+"/applet/loginApplet.jsp"));
208 } catch (MalformedURLException mfurle) {
209 setMessage(mfurle.getMessage());
210 }
211 }
212 }
213 class createPKIApplet_reset_actionAdapter implements ActionListener {
214 createPKIApplet adaptee;
215
216 createPKIApplet_reset_actionAdapter(createPKIApplet adaptee) {
217 this.adaptee = adaptee;
218 }
219
220 public void actionPerformed(ActionEvent e) {
221 adaptee.reset_actionPerformed(e);
222 }
223 }

① package acdpu.pki.applet;
② import javax.swing.JApplet;
③ import java.awt.Dimension;
④ import java.awt.Toolkit;
⑤ import java.awt.BorderLayout;
⑥ import javax.swing.JFrame;
⑦ import javax.swing.UIManager;
⑧ import javax.swing.JLabel;
⑨ import java.awt.Rectangle;
⑩ import javax.swing.JPanel;
⑪ import javax.swing.BorderFactory;
⑫ import javax.swing.JScrollPane;
⑬ import javax.swing.JTextPane;
⑭ import javax.swing.JTextField;
⑮ import javax.swing.JButton;
16 import javax.swing.JPasswordField;
17 import java.awt.event.ActionListener;
18 import java.awt.event.ActionEvent;
19 import java.net.*;
20 import java.io.*;
21 import java.security.*;
22 import kr.co.itnext.crypto.*;
23 import java.applet.*;
24
25 public class loginPKIApplet extends JApplet {
26
27 // 객체 생성
28 private JLabel topLabel = new JLabel(); // 상단 라벨
29 private JScrollPane messageScrollPane = new JScrollPane(); // 하단 메시지창 스크롤
30 private JTextPane messageTextPane = new JTextPane(); // 하단 메시지창
31 private JTextField userid = new JTextField(); // 사용자 아이디 입력
32 private JPasswordField passwd = new JPasswordField(); // 사용자 암호 입력
33 private JButton submit = new JButton(); // 전송 버튼
34 private JButton reset = new JButton(); // 리셋
35 private JButton create = new JButton();
36 private JButton login = new JButton();
37
38 private final String serverIp = "10.60.34.202";
39 private final int serverPort = 8888;
40
41 public loginPKIApplet() {
42 }
43
44 public void init() {
45
46 try {
47 jbInit();
48 } catch(Exception e) {
49 e.printStackTrace();
50 }
51 }
52
53 private void jbInit() throws Exception {
54 this.getContentPane().setLayout(null);
55 this.setSize(new Dimension(524, 397));
56
57 // 상단 라벨
58 topLabel.setText("PKI 로그인");
59 topLabel.setBounds(new Rectangle(0, 0, 525, 30));
60
61 // 사용자 아이디
62 userid.setBounds(new Rectangle(15, 35, 280, 65));
63 userid.setBorder(BorderFactory.createTitledBorder("UserId"));
64
65 // 사용자 암호
66 passwd.setBounds(new Rectangle(15, 115, 280, 60));
67 passwd.setBorder(BorderFactory.createTitledBorder("PassWord"));
68
69 // 전송 버튼
70 submit.setText("로그인");
71 submit.setBounds(new Rectangle(85, 215, 125, 40));
72 submit.addActionListener(new ActionListener() {
73 public void actionPerformed(ActionEvent e) {
74 submit_actionPerformed(e);
75 }
76 });
77
78 // 리렛 버튼
79 reset.setText("재입력");
80 reset.setBounds(new Rectangle(305, 215, 125, 40));
81 reset.addActionListener(new loginPKIApplet_reset_actionAdapter(this));
82 create.setText("인증서생성");
83 create.setBounds(new Rectangle(355, 40, 115, 40));
84 create.setActionCommand("create");
85 create.addActionListener(new ActionListener() {
86 public void actionPerformed(ActionEvent e) {
87 create_actionPerformed(e);
88 }
89 });
90 login.setText("로그인");
91 login.setBounds(new Rectangle(355, 95, 115, 40));
92 login.setActionCommand("login");
93 login.setEnabled(false);
94
95 // 스크롤 상자
96 messageScrollPane.setBounds(new Rectangle(10, 290, 505, 80));
97 messageScrollPane.setBorder(BorderFactory.createTitledBorder("Message"));
98 messageScrollPane.setAutoscrolls(true);
99
100 // 메시지 창
101 messageTextPane.setText("사용자 아이디와 비밀번호를 입력하여 주십시요...");
102 messageTextPane.setEditable(false);
103 messageScrollPane.getViewport().add(messageTextPane, null);
104 this.getContentPane().add(login, null);
105
106 this.getContentPane().add(create, null);
107 this.getContentPane().add(passwd, null);
108 this.getContentPane().add(reset, null);
109 this.getContentPane().add(submit, null);
110 this.getContentPane().add(userid, null);
111 this.getContentPane().add(messageScrollPane, null);
112 this.getContentPane().add(topLabel, null);
113 }
114
115 static {
116 try {
117 // UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
118 // UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
119 } catch(Exception e) {
120 }
121 }
122
123 void reset_actionPerformed(ActionEvent e) {
124 userid.setText("");
125 passwd.setText("");
126 userid.setEditable(true);
127 passwd.setEditable(true);
128 setMessage("입력 창이 초기화 되었습니다.");
129 }
130
131 private void setMessage(String message) {
132 messageTextPane.setText(messageTextPane.getText()+"\n"+message);
133 }
134
135 private void submit_actionPerformed(ActionEvent e) {
136 userid.setEditable(false);
137 passwd.setEditable(false);
138 String userEnterText = userid.getText();
139 String passEnterText = new String(passwd.getPassword());
140 setMessage("인증서버에 접속중입니다.... ");
141
142 try{
143 URL url = new URL("http",serverIp,serverPort,"/loginpki");
144 URLConnection urlcon = url.openConnection();
145 urlcon.setDoInput(true);
146 urlcon.setDoOutput(true);
147 urlcon.setUseCaches(false);
148
149 String privateKeyFile = "C:/peace/"+userEnterText+"PRI.ser";
150 File file = new File(privateKeyFile);
151 byte[] signningrow = null;
152 if(!file.exists()){
153 setMessage("인증서가 존재하지 않습니다.");
154 //System.exit(0);
155 } else {
156 setMessage("sign 데이터 생성중입니다. ");
157 try {
158 Signature signning = Signature.getInstance("DSA");
159 ObjectInputStream keyin = new ObjectInputStream(new FileInputStream(file));
160 PrivateKey privatekey = (PrivateKey)keyin.readObject();
161 keyin.close();
162 signning.initSign(privatekey);
163 signning.update((userEnterText+passEnterText).getBytes());
164 signningrow = signning.sign();
165 BASE64Encoder encoder = new BASE64Encoder();
166 String base64Signning = encoder.encode(signningrow);
167 urlcon.setRequestProperty("userid",userEnterText);
168 urlcon.setRequestProperty("passwd",passEnterText);
169 urlcon.setRequestProperty("signningdata",base64Signning);
170 urlcon.connect();
171
172 setMessage("sign 데이터를 전송중입니다.... ");
173 } catch(NoSuchAlgorithmException noalgoe) {
174 setMessage("signning 알고리즘이 없습니다.");
175 //System.exit(0);
176 } catch(ClassNotFoundException cnotfe) {
177 setMessage("PC에 저장된 개인키를 생성할수 없습니다.");
178 //System.exit(0);
179 } catch(InvalidKeyException inkeye) {
180 setMessage("부적합한 개인키를 소유하고 있습니다.");
181 //System.exit(0);
182 } catch(SignatureException signe) {
183 setMessage("개인키 서명중 에러가 발생하였습니다.");
184 //System.exit(0);
185 }
186 }
187
188 BufferedReader inre =
189 new BufferedReader(new InputStreamReader(urlcon.getInputStream()));
190 String receiveMessage = inre.readLine();
191
192
193 if(receiveMessage.equals("0")) {
194 setMessage("로그인 페이지로 이동합니다.");
195 AppletContext cont = getAppletContext();
196 cont.showDocument(new URL(
197 "http://"+serverIp+":"+serverPort+"/login.jsp?f_userid="+userEnterText+
198 "&f_passwd="+passEnterText));
199
200 } else if(receiveMessage.equals("1")) {
201 setMessage("인증서가 구형이거나 정상적인 인증서가 아님니다.");
202 } else if(receiveMessage.equals("2")) {
203 setMessage("사용자가 틀림니다. 아이디와 비밀번호를 확인해 주십시요.");
204 } else if(receiveMessage.equals("3")) {
205 setMessage("사용기간이 지났거나 시작되지 않았습니다.");
206 } else {
207 setMessage("인증서버 접속에 실패하였습니다. 관리자에 문의하십시요.");
208 }
209 inre.close();
210
211 } catch (MalformedURLException mfurle) {
212 setMessage(mfurle.getMessage());
213 } catch (IOException ioe) {
214 setMessage(ioe.getMessage());
215 }
216 }
217
218 private void create_actionPerformed(ActionEvent e) {
219 try{
220 AppletContext cont = getAppletContext();
221 cont.showDocument(new URL(
222 "http://"+serverIp+":"+serverPort+
223 "/applet/createApplet.jsp"));
224 } catch (MalformedURLException mfurle) {
225 setMessage(mfurle.getMessage());
226 }
227
228 }
229 }
230 class loginPKIApplet_reset_actionAdapter implements ActionListener {
231 loginPKIApplet adaptee;
232
233 loginPKIApplet_reset_actionAdapter(loginPKIApplet adaptee) {
234 this.adaptee = adaptee;
235 }
236
237 public void actionPerformed(ActionEvent e) {
238 adaptee.reset_actionPerformed(e);
239 }
240 }

댓글 없음:

댓글 쓰기

블록체인 개요 및 오픈소스 동향

블록체인(block chain) 블록체인은 공공 거래장부이며 가상 화폐로 거래할때 발생할때 발생할 수 있는 해킹을 막는 기술. 분산 데이터베이스의 한 형태로, 지속적으로 성장하는 데이터 기록 리스트로서 분산 노드의 운영자에 의한 임의 조작이 불가...