HttpServletCredential.java
- /*
- * GovWay - A customizable API Gateway
- * https://govway.org
- *
- * Copyright (c) 2005-2025 Link.it srl (https://link.it).
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 3, as published by
- * the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
- package org.openspcoop2.utils.transport.http;
- import java.io.Serializable;
- import java.security.cert.X509Certificate;
- import java.util.ArrayList;
- import java.util.List;
- import javax.servlet.http.HttpServletRequest;
- import org.apache.commons.lang.NotImplementedException;
- import org.openspcoop2.utils.certificate.Certificate;
- import org.openspcoop2.utils.certificate.CertificateUtils;
- import org.openspcoop2.utils.io.Base64Utilities;
- import org.openspcoop2.utils.transport.Credential;
- import org.slf4j.Logger;
- /**
- * HttpServletCredentials
- *
- * @author Poli Andrea (apoli@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public class HttpServletCredential extends Credential implements Serializable {
- /**
- *
- */
- private static final long serialVersionUID = 1L;
- public static final String SERVLET_REQUEST_X509CERTIFICATE = "javax.servlet.request.X509Certificate";
-
- // Servlet Request
- private transient HttpServletRequest httpServletRequest;
-
- public HttpServletCredential(){
- super();
- }
- public HttpServletCredential(HttpServletRequest req,Logger log){
- this(req, log, false);
- }
- public HttpServletCredential(HttpServletRequest req,Logger log,boolean debug){
-
- super();
-
- this.httpServletRequest = req;
-
- String auth = req.getHeader(HttpConstants.AUTHORIZATION);
-
- // Basic (HTTP-Based)
- if(auth != null && auth.toLowerCase().startsWith(HttpConstants.AUTHORIZATION_PREFIX_BASIC.toLowerCase())){
- // Sbustring(6): elimina la parte "Basic "
- String cValue = auth.substring(HttpConstants.AUTHORIZATION_PREFIX_BASIC.length());
- String decodeAuth = null;
- try {
- decodeAuth = new String(Base64Utilities.decode(cValue));
- }catch(Throwable e) {
- log.error("Password non estraibile dalla stringa ricevuta '"+cValue+"', decodifica base-64 non riuscita: "+e.getMessage(),e);
- }
- if(decodeAuth!=null) {
- String [] decodeAuthSplit = decodeAuth.split(":");
- if(decodeAuthSplit.length>1){
- this.username = decodeAuthSplit[0];
- try {
- this.password = decodeAuth.substring(decodeAuth.indexOf(":")+1, decodeAuth.length());
- }catch(Throwable e) {
- log.error("Password non estraibile dalla stringa ricevuta '"+decodeAuth+"'");
- }
- }
- if(debug && log!=null){
- log.info("BasicAuthentication presente nella richiesta, username ["+this.username+"] e password ["+this.password+"]");
- }
- }
- }
-
- // Bearer (Token Oauth)
- if(auth != null && auth.toLowerCase().startsWith(HttpConstants.AUTHORIZATION_PREFIX_BEARER.toLowerCase())){
- this.bearerToken = auth.substring(HttpConstants.AUTHORIZATION_PREFIX_BEARER.length());
- }
-
- // SSL (HTTPS)
- java.security.cert.X509Certificate[] certs =
- (java.security.cert.X509Certificate[]) req.getAttribute(SERVLET_REQUEST_X509CERTIFICATE);
-
- if(certs!=null) {
- if(debug && log!=null){
- try{
- StringBuilder bf = new StringBuilder();
- CertificateUtils.printCertificate(bf, certs);
- log.info(bf.toString());
- }catch(Throwable e){
- log.error("Print info certs error: "+e.getMessage(),e);
- }
- }
- if(certs.length > 0){
- //System.out.println("toString ["+certs[0].getSubjectX500Principal().toString()+"]"); // toString e' equivalente a RFC1779
- //System.out.println("getName ["+certs[0].getSubjectX500Principal().getName()+"]");
- //System.out.println("CANONICAL ["+certs[0].getSubjectX500Principal().getName(javax.security.auth.x500.X500Principal.CANONICAL)+"]");
- //System.out.println("RFC1779 ["+certs[0].getSubjectX500Principal().getName(javax.security.auth.x500.X500Principal.RFC1779)+"]");
- //System.out.println("RFC2253 ["+certs[0].getSubjectX500Principal().getName(javax.security.auth.x500.X500Principal.RFC2253)+"]");
- this.subject = certs[0].getSubjectX500Principal().toString();
- this.issuer = certs[0].getIssuerX500Principal().toString();
- List<X509Certificate> chains = new ArrayList<>();
- if(certs.length > 1){
- for (int i = 1; i < certs.length; i++) {
- chains.add(certs[i]);
- }
- }
- this.certificate = new Certificate("transport", certs[0], chains);
- }
- }else{
- if(debug && log!=null){
- log.info("Certificati non presenti nella richiesta");
- }
- }
-
- // getUserPrincipal (SERVLET API)
- if( req.getUserPrincipal()!=null ){
- this.principal = req.getUserPrincipal();
- this.principalName = this.principal.getName();
- }
- }
-
-
- @Override
- public boolean isUserInRole(String role){
- if(this.httpServletRequest!=null){
- return this.httpServletRequest.isUserInRole(role);
- }
- else{
- throw new NotImplementedException();
- }
- }
-
- @Override
- public Object getAttribute(String attributeName){
- if(this.httpServletRequest!=null){
- return this.httpServletRequest.getAttribute(attributeName);
- }
- else{
- throw new NotImplementedException();
- }
- }
- }