Prechádzať zdrojové kódy

Create HttpCertsEntryPoint.java

MaxKey 4 rokov pred
rodič
commit
9777edefcc

+ 81 - 0
maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/support/certs/HttpCertsEntryPoint.java

@@ -0,0 +1,81 @@
+package org.maxkey.authn.support.certs;
+
+import java.security.cert.X509Certificate;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.maxkey.authn.AbstractAuthenticationProvider;
+import org.maxkey.authn.support.httpheader.HttpHeaderEntryPoint;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.web.servlet.AsyncHandlerInterceptor;
+
+public class HttpCertsEntryPoint  implements AsyncHandlerInterceptor {
+	private static final Logger _logger = LoggerFactory.getLogger(HttpHeaderEntryPoint.class);
+	
+	static String CERTIFICATE_ATTRIBUTE = "javax.servlet.request.X509Certificate";
+	static String PEER_CERTIFICATES_ATTRIBUTE = "javax.net.ssl.peer_certificates";
+	
+    boolean enable;
+    
+    @Autowired
+    @Qualifier("authenticationProvider")
+    AbstractAuthenticationProvider authenticationProvider ;
+    
+    @Override
+	 public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {
+		 
+		 if(!enable){
+			 return true;
+		 }
+
+		 _logger.debug("Certificate Login Start ...");
+		 _logger.debug("Request url : "+ request.getRequestURL());
+		 _logger.debug("Request URI : "+ request.getRequestURI());
+		 _logger.trace("Request ContextPath : "+ request.getContextPath());
+		 _logger.trace("Request ServletPath : "+ request.getServletPath());
+		 _logger.trace("RequestSessionId : "+ request.getRequestedSessionId());
+		 _logger.trace("isRequestedSessionIdValid : "+ request.isRequestedSessionIdValid());
+		 _logger.trace("getSession : "+ request.getSession(false));
+		 
+		X509Certificate[] certificates= (X509Certificate[])request.getAttribute(CERTIFICATE_ATTRIBUTE); // 2.2 spec
+		if (certificates == null) {
+			 certificates = (X509Certificate[]) request.getAttribute(PEER_CERTIFICATES_ATTRIBUTE); // 2.1 spec
+        }
+		
+		for (X509Certificate cert : certificates) {
+			cert.checkValidity();
+			_logger.debug("cert validated");
+			_logger.debug("cert infos " + cert.toString());
+			_logger.debug("Version " + cert.getVersion());
+			_logger.debug("SerialNumber " + cert.getSerialNumber().toString(16));
+			_logger.debug("SubjectDN " + cert.getSubjectDN());
+			_logger.debug("IssuerDN " + cert.getIssuerDN());
+			_logger.debug("NotBefore " + cert.getNotBefore());
+			_logger.debug("SigAlgName " + cert.getSigAlgName());
+		    byte[] sign = cert.getSignature();
+		    _logger.debug("Signature ");
+		    for (int j = 0; j < sign.length; j++){
+		    	_logger.debug(sign[j] + ",");
+		    }
+		    java.security.PublicKey pk = cert.getPublicKey();
+		    byte[] pkenc = pk.getEncoded();
+		    _logger.debug("PublicKey ");
+		    for (int j = 0; j < pkenc.length; j++){
+		    	_logger.debug(pkenc[j] + ",");
+		    }
+		}
+		 return true;
+    }
+
+	public HttpCertsEntryPoint(boolean enable, AbstractAuthenticationProvider authenticationProvider) {
+		super();
+		this.enable = enable;
+		this.authenticationProvider = authenticationProvider;
+	}
+    
+    
+}