Question: I have included a Java code where I need to find a way to convert HashMap to JSON. Is there a way that I can
I have included a Java code where I need to find a way to convert HashMap to JSON. Is there a way that I can do this as I am not familiar with how to use JSON?
//Response Header Imports import java.net.*; import java.util.List; import java.util.Map; import java.io.IOException; ///////////////////////////////// import org.apache.catalina.Server; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.ModelAndView;
import java.util.HashMap; import java.util.Map;
import java.security.cert.X509Certificate; import javax.net.*; import java.net.URL; import javax.net.ssl.*; import java.security.cert.Certificate; import java.net.MalformedURLException; import java.io.IOException; import java.security.cert.*;
public class ServerAnalyzerBackEnd {
private String url; private boolean validURL;
public ServerAnalyzerBackEnd(String url) { this.url = url; this.validURL = validateURLSyntax(); }
public ModelAndView start() { String host;
Map params = new HashMap<>(); params.put("url", url); String secureURL = ""; URL testURL; int port; String cert_chain = "";
if (!validURL) { System.out.println("We should probably stop it here or something."); } //url is not null, assign to secureURL to create https connection if(url != null){ secureURL = url; }
//Initialize Strings for later output String response_header = ""; String cipherSuite = "";
//create URL object from 'url' //create https connection based off of url and then call getCertChain method to pull that cert chain try { testURL = new URL(secureURL); port = testURL.getPort(); host = testURL.getHost();
SSLSocketFactory socketFactory = (SSLSocketFactory) SSLSocketFactory.getDefault(); Socket socket = socketFactory.createSocket(host, port);
SSLSession session = ((SSLSocket) socket).getSession(); cipherSuite = session.getCipherSuite(); System.out.println("Cipher is " + session.getCipherSuite());
HttpsURLConnection connection = (HttpsURLConnection)testURL.openConnection(); cert_chain = getCertChain(session); System.out.println(cert_chain); response_header = getResponseHeader(connection); } catch(MalformedURLException e){ e.printStackTrace(); } catch(IOException e){ e.printStackTrace(); }
//Put strings into Hash Map to be displayed in output params.put("response_header", response_header); params.put("certificate_chain", cert_chain); params.put("cipher_suite", cipherSuite); return new ModelAndView("showURL", params); }
public String getCertChain(SSLSession session){ String result = ""; try{
//make array of Certificate objects and grab the cert chain from the https connection Certificate[] certificates = session.getPeerCertificates();
//foreach c in Certificates print cert details to console. for(int i = 0; i < certificates.length; i++){ X509Certificate cert = (X509Certificate) certificates[i]; result += (cert.getSubjectX500Principal()); } } /* catch (SSLPeerUnverifiedException e){ e.printStackTrace(); } */ catch (IOException e){ e.printStackTrace(); }
//System.out.println(result); return result; }
public String getResponseHeader(HttpsURLConnection connection){ String result = "Key 'Content-Type' is not found!";
//Response Header Function try { System.out.println("HTTP Headers"); System.out.println();
Map> map = connection.getHeaderFields(); for (Map.Entry> entry : map.entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue()); } System.out.println(); System.out.println("Get Header by key:"); String server = connection.getHeaderField("Content-Type");
if (server != null) { result = "Content-Type: " + server; }
} catch (Exception e) { e.printStackTrace(); }
System.out.println(result); return result; }
public boolean validateURLSyntax() { int firstColon; int secondColon; boolean URLsyntax = true;
//Checks if the first four characters are http if (!this.url.substring(0,4).equals("http")) { URLsyntax = false; }
//Checks if a port number was specified. If not, appends :443 to the URL. firstColon = this.url.indexOf(":"); secondColon = this.url.lastIndexOf(':');
if (secondColon == -1 || firstColon == secondColon) { this.url = this.url + ":443"; }
//Something like https://www.google.com: and no port actually specified or junk is after the port. secondColon = this.url.lastIndexOf(':'); if (this.url.charAt(this.url.length() - 1) == ':' || !Character.isDigit(this.url.charAt(secondColon + 1))) { URLsyntax = false; } return URLsyntax; }
}
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
