📄 authenticationdemopanel.java
字号:
JXErrorDialog.showDialog(null, "Application Error", e); } }//GEN-LAST:event_simpleAuthDialogBtnActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JLabel guestLabel; private javax.swing.JEditorPane jEditorPane1; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel5; private javax.swing.JPanel jPanel1; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JSplitPane jSplitPane1; private javax.swing.JLabel messageLabel; private org.jdesktop.swingx.JXList messageList; private javax.swing.JButton romainAuthDialogBtn; private javax.swing.JButton simpleAuthDialogBtn; private javax.swing.JLabel subjectLabel; private javax.swing.JLabel timestampLabel; // End of variables declaration//GEN-END:variables private static final class NullPasswordStore extends PasswordStore { public boolean set(String username, String server, char[] password) { return false; } public char[] get(String username, String server) { return new char[0]; } } private final class NullLoginService extends LoginService { NullLoginService() { super("java.net"); } public boolean authenticate(String name, char[] password, String server) { try { System.setProperty("http.proxyHost", "webcache.central"); System.setProperty("http.proxyPort", "8080"); URL url = new URL("http://www.javadesktop.org/forums/login!default.jspa?referrer=index.jspa"); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); String sessionId = conn.getHeaderField("Set-cookie"); sessionId = sessionId.substring(0, sessionId.indexOf(";")); System.out.println(sessionId); conn.disconnect(); url = new URL("http://www.javadesktop.org/forums/login.jspa"); conn = (HttpURLConnection)url.openConnection(); conn.setInstanceFollowRedirects(false); conn.setRequestProperty("Cookie", sessionId); conn.setRequestMethod("POST"); String output = "username=" + name + "&password=" + new String(password) + "&autoLogin=true&doLogin=Login"; conn.setFixedLengthStreamingMode(output.length()); conn.setDoOutput(true); OutputStream os = conn.getOutputStream(); os.write(output.getBytes()); os.flush(); String jiveAuthToken = conn.getHeaderField("Set-cookie"); jiveAuthToken = jiveAuthToken.substring(0, jiveAuthToken.indexOf(";")); System.out.println(jiveAuthToken); conn.disconnect(); url = new URL("http://javadesktop.org/forums/rss/rssthreads.jsp?forumID=53"); conn = (HttpURLConnection)url.openConnection(); conn.setInstanceFollowRedirects(false); conn.setRequestProperty("Cookie", sessionId + "; " + jiveAuthToken); InputStream is = conn.getInputStream(); byte[] data = new byte[1024]; int length = -1; StringBuilder buffer = new StringBuilder(); while ((length = is.read(data)) != -1) { buffer.append(new String(data, 0, length)); } is.close(); conn.disconnect(); SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); parser.parse(new InputSource(new StringReader(buffer.toString())), new DefaultHandler() { private Stack<String> tags = new Stack<String>(); private String data; private DataRow row; public void characters(char[] ch, int start, int length) throws org.xml.sax.SAXException { data = new String(ch, start, length); } public void startElement(String uri, String localName, String qName, org.xml.sax.Attributes attributes) throws org.xml.sax.SAXException { tags.push(qName); } public void endElement(String uri, String localName, String qName) throws org.xml.sax.SAXException { String name = tags.pop(); String parentName = tags.size() > 0 ? tags.peek() : null; //if the parent was "channel" if (parentName != null && parentName.equals("channel")) { if (name.equals("title")) { System.out.println("Title: " + data); } else if (name.equals("link")) { System.out.println("URL: " + data); } else if (name.equals("description")) { System.out.println("Description: " + data); } else if (name.equals("language")) { System.out.println("Language: " + data); } } else if (parentName != null && parentName.equals("item")) { //if the parent was "item" if (name.equals("title")) { row = messages.appendRow(); row.setValue("messageId", messages.getRowCount()); row.setValue("title", data); } else if (name.equals("link")) { row.setValue("link", data); } else if (name.equals("description")) { row.setValue("description", data); } else if (name.equals("jf:creationDate")) { row.setValue("creationDate", data); } else if (name.equals("jf:modificationDate")) { row.setValue("modificationDate", data); } else if (name.equals("jf:messageCount")) { row.setValue("messageCount", data); } else if (name.equals("jf:author")) { row.setValue("author", data); } else if (name.equals("jf:replyCount")) { row.setValue("replyCount", data); row.setStatus(DataRow.DataRowStatus.UNCHANGED); //now, load the thread data for this message try { URL url = new URL((String)row.getValue("link")); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); InputStream is = conn.getInputStream(); byte[] data = new byte[1024]; int length = -1; StringBuilder buffer = new StringBuilder(); while ((length = is.read(data)) != -1) { buffer.append(new String(data, 0, length)); } //iterate over all the lines List<String> lines = Arrays.asList(buffer.toString().split("\\n")); Iterator<String> itr = lines.iterator(); DataRow threadRow = null; while (itr.hasNext()) { String line = itr.next(); if (line.contains("<span class=\"jive-guest\">")) { String guest = parseGuest(itr); if (!guest.startsWith("<nobr>")) { threadRow = threads.appendRow(); threadRow.setValue("guest", guest); threadRow.setValue("messageId", row.getValue("messageId")); } } else if (line.contains("<span class=\"jive-subject\">")) { String subject = parseSubject(itr); if (threadRow != null) { threadRow.setValue("subject", subject); String timestamp = parseTimestamp(itr); threadRow.setValue("timestamp", timestamp); } } else if (line.contains("<td colspan=\"2\" style=\"border-top: 1px #ccc solid;\">")) { String message = parseMessage(itr); if (threadRow != null) { threadRow.setValue("message", message); threadRow.setStatus(DataRow.DataRowStatus.UNCHANGED); } } } } catch (Exception e) { e.printStackTrace(); } } } } }); return true; } catch (Exception e) { e.printStackTrace(); return false; } } private String parseGuest(Iterator<String> itr) { StringBuilder buffer = new StringBuilder(); while (itr.hasNext()) { String line = itr.next(); if (line.contains("</span>")) { return buffer.toString().trim(); } else { buffer.append(removeBreakTags(line)); } } return ""; } private String parseSubject(Iterator<String> itr) { StringBuilder buffer = new StringBuilder(); while (itr.hasNext()) { String line = itr.next(); if (line.contains("</span>")) { return buffer.toString().trim(); } else if (line.contains("<a")) { //skip it } else { //if the line contains any <br> tags, remove them buffer.append(removeBreakTags(line)); } } return ""; } private String parseTimestamp(Iterator<String> itr) { StringBuilder buffer = new StringBuilder(); while (itr.hasNext()) { String line = itr.next(); if (line.contains("</td>")) { return buffer.toString().trim(); } else if (line.contains("Posted:")) { //skip it } else { buffer.append(removeBreakTags(line)); } } return ""; } private String parseMessage(Iterator<String> itr) { StringBuilder buffer = new StringBuilder(); while (itr.hasNext()) { String line = itr.next(); if (line.contains("</td>")) { return buffer.toString().trim(); } else { buffer.append(line); } } return ""; } private String removeBreakTags(String line) { return line.replaceAll("\\<br\\>", ""); } } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -