Create HttpCertsEntryPoint.java

This commit is contained in:
MaxKey
2021-02-20 20:40:09 +08:00
parent f19e2aa6f2
commit 9777edefcc

View File

@@ -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;
}
}