diff options
| author | Thomas Lenz <tlenz@iaik.tugraz.at> | 2016-02-18 12:22:57 +0100 | 
|---|---|---|
| committer | Thomas Lenz <tlenz@iaik.tugraz.at> | 2016-02-18 12:22:57 +0100 | 
| commit | 3cec20ee2161cb1a8c8c4516e47a8402d950957e (patch) | |
| tree | 292855dfb3debbb85c594ca6a4917cd47ae4d992 /id/server/idserverlib/src | |
| parent | c9370266c7553db65e9d18f7fe2a0230ab94d912 (diff) | |
| download | moa-id-spss-3cec20ee2161cb1a8c8c4516e47a8402d950957e.tar.gz moa-id-spss-3cec20ee2161cb1a8c8c4516e47a8402d950957e.tar.bz2 moa-id-spss-3cec20ee2161cb1a8c8c4516e47a8402d950957e.zip | |
fix problem with pending-requests and protocol specific error messages
Diffstat (limited to 'id/server/idserverlib/src')
14 files changed, 183 insertions, 124 deletions
| diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/TaskExecutionException.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/TaskExecutionException.java index 3e9f4cf14..932019d2c 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/TaskExecutionException.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/TaskExecutionException.java @@ -22,7 +22,9 @@   */  package at.gv.egovernment.moa.id.auth.modules; +import at.gv.egovernment.moa.id.moduls.IRequest;  import at.gv.egovernment.moa.id.process.ProcessExecutionException; +import at.gv.egovernment.moa.util.MiscUtil;  /**   * @author tlenz @@ -32,14 +34,18 @@ public class TaskExecutionException extends ProcessExecutionException {  	private static final long serialVersionUID = 1L;  	Throwable originalException = null; +	String pendingRequestID = null;  	/**  	 * @param message  	 * @param cause  	 */ -	public TaskExecutionException(String message, Throwable cause) { +	public TaskExecutionException(IRequest pendingReq, String message, Throwable cause) {  		super(message, cause); -		originalException = cause; +		this.originalException = cause; +		 +		if (MiscUtil.isNotEmpty(pendingReq.getRequestID())) +			this.pendingRequestID = pendingReq.getRequestID();  	} @@ -50,7 +56,19 @@ public class TaskExecutionException extends ProcessExecutionException {  	 */  	public Throwable getOriginalException() {  		return originalException; +		  	} + +	/** +	 * Get the pending-request ID of that request, which was processed when the exception occurs  +	 *  +	 * @return the pendingRequestID +	 */ +	public String getPendingRequestID() { +		return pendingRequestID; +	} +	 +	 diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/CreateInterfedeartionRequestTask.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/CreateInterfedeartionRequestTask.java index 053f5d7ff..d0c12a6f3 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/CreateInterfedeartionRequestTask.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/CreateInterfedeartionRequestTask.java @@ -93,7 +93,7 @@ public class CreateInterfedeartionRequestTask extends AbstractAuthServletTask {  		if (MiscUtil.isEmpty(idpEntityID)) {  			Logger.info("Interfederation not possible -> not inderfederation IDP EntityID found!"); -			throw new TaskExecutionException("Interfederation not possible", new MOAIDException("No inderfederation-IDP EntityID found.", null)); +			throw new TaskExecutionException(pendingReq, "Interfederation not possible", new MOAIDException("No inderfederation-IDP EntityID found.", null));  		} diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/EvaluateBKUSelectionTask.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/EvaluateBKUSelectionTask.java index 9db5baeab..3b18959a5 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/EvaluateBKUSelectionTask.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/EvaluateBKUSelectionTask.java @@ -31,12 +31,10 @@ import org.apache.commons.lang.StringEscapeUtils;  import org.springframework.stereotype.Service;  import at.gv.egovernment.moa.id.auth.MOAIDAuthConstants; -import at.gv.egovernment.moa.id.auth.data.AuthenticationSession;  import at.gv.egovernment.moa.id.auth.exception.MOAIDException;  import at.gv.egovernment.moa.id.auth.modules.AbstractAuthServletTask;  import at.gv.egovernment.moa.id.auth.modules.TaskExecutionException;  import at.gv.egovernment.moa.id.commons.db.ex.MOADatabaseException; -import at.gv.egovernment.moa.id.moduls.IRequest;  import at.gv.egovernment.moa.id.process.api.ExecutionContext;  import at.gv.egovernment.moa.logging.Logger;  import at.gv.egovernment.moa.util.MiscUtil; @@ -58,7 +56,7 @@ public class EvaluateBKUSelectionTask extends AbstractAuthServletTask {  			//load pending request  			String pendingReqID = request.getParameter(MOAIDAuthConstants.PARAM_TARGET_PENDINGREQUESTID);	    		      			pendingReqID = StringEscapeUtils.escapeHtml(pendingReqID);						 -			IRequest pendingReq = requestStoreage.getPendingRequest(pendingReqID); +			pendingReq = requestStoreage.getPendingRequest(pendingReqID);  			if (pendingReq == null) {  				Logger.info("No PendingRequest with Id: " + executionContext.get("pendingRequestID") + " Maybe, a transaction timeout occure."); @@ -70,12 +68,11 @@ public class EvaluateBKUSelectionTask extends AbstractAuthServletTask {  			String newPendingRequestID = requestStoreage.changePendingRequestID(pendingReq);  			executionContext.put(MOAIDAuthConstants.PARAM_TARGET_PENDINGREQUESTID, newPendingRequestID); -	    	AuthenticationSession moaSession = null;  	    	String moaSessionID = pendingReq.getMOASessionIdentifier();  	    	try { -	    	    moaSession = authenticatedSessionStorage.getSession(moaSessionID); +	    	    moasession = authenticatedSessionStorage.getSession(moaSessionID); -	    	    if (moaSession == null) { +	    	    if (moasession == null) {  					Logger.info("MOASession with SessionID="+ moaSessionID + " is not found in Database");  					throw new MOAIDException("init.04", new Object[] {  							moaSessionID}); @@ -108,11 +105,11 @@ public class EvaluateBKUSelectionTask extends AbstractAuthServletTask {  		} catch (MOAIDException e) { -			throw new TaskExecutionException(e.getMessage(), e); +			throw new TaskExecutionException(pendingReq, e.getMessage(), e);  		} catch (Exception e) {  			Logger.warn("EvaluateBKUSelectionTask has an internal error", e); -			throw new TaskExecutionException(e.getMessage(), e); +			throw new TaskExecutionException(pendingReq, e.getMessage(), e);  		}  	} diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/FinalizeAuthenticationTask.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/FinalizeAuthenticationTask.java index ed309d85a..4fd43b6ba 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/FinalizeAuthenticationTask.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/FinalizeAuthenticationTask.java @@ -29,15 +29,13 @@ import org.springframework.stereotype.Service;  import at.gv.egovernment.moa.id.auth.MOAIDAuthConstants;  import at.gv.egovernment.moa.id.auth.builder.DataURLBuilder; -import at.gv.egovernment.moa.id.auth.data.AuthenticationSession;  import at.gv.egovernment.moa.id.auth.exception.MOAIDException;  import at.gv.egovernment.moa.id.auth.modules.AbstractAuthServletTask;  import at.gv.egovernment.moa.id.auth.modules.TaskExecutionException;  import at.gv.egovernment.moa.id.commons.db.ex.MOADatabaseException; -import at.gv.egovernment.moa.id.moduls.IRequest;  import at.gv.egovernment.moa.id.moduls.RequestImpl;  import at.gv.egovernment.moa.id.process.api.ExecutionContext; -import at.gv.egovernment.moa.id.protocols.AbstractProtocolModulController; +import at.gv.egovernment.moa.id.protocols.AbstractAuthProtocolModulController;  import at.gv.egovernment.moa.logging.Logger;  import at.gv.egovernment.moa.util.MiscUtil; @@ -57,7 +55,7 @@ public class FinalizeAuthenticationTask extends AbstractAuthServletTask {  			throws TaskExecutionException {  		try { -			IRequest pendingReq = requestStoreage.getPendingRequest( +			pendingReq = requestStoreage.getPendingRequest(  					(String) executionContext.get(MOAIDAuthConstants.PARAM_TARGET_PENDINGREQUESTID));	  			if (pendingReq == null) { @@ -67,16 +65,15 @@ public class FinalizeAuthenticationTask extends AbstractAuthServletTask {  			}  			//get Session from context -			String moasessionid = pendingReq.getMOASessionIdentifier(); -			AuthenticationSession session = null;				 +			String moasessionid = pendingReq.getMOASessionIdentifier();			  			if (MiscUtil.isEmpty(moasessionid)) {  				Logger.warn("MOASessionID is empty.");  				throw new MOAIDException("auth.18", new Object[] {});  			}  			try {			 -				session = authenticatedSessionStorage.getSession(moasessionid); -				if (session == null) { +				moasession = authenticatedSessionStorage.getSession(moasessionid); +				if (moasession == null) {  					Logger.info("MOASession with SessionID=" + moasessionid + " is not found in Database");  					throw new MOAIDException("init.04", new Object[] { moasessionid }); @@ -98,8 +95,8 @@ public class FinalizeAuthenticationTask extends AbstractAuthServletTask {  			//set MOASession to authenticated and store MOASession -			session.setAuthenticated(true); -			String newMOASessionID = authenticatedSessionStorage.changeSessionID(session); +			moasession.setAuthenticated(true); +			String newMOASessionID = authenticatedSessionStorage.changeSessionID(moasession);  			//set pendingRequest to authenticated and set new MOASessionID			  			((RequestImpl)pendingReq).setMOASessionIdentifier(newMOASessionID); @@ -109,7 +106,7 @@ public class FinalizeAuthenticationTask extends AbstractAuthServletTask {  			Logger.info("AuthProcess finished. Redirect to Protocol Dispatcher.");  			String redirectURL = new DataURLBuilder().buildDataURL(pendingReq.getAuthURL(),  -					AbstractProtocolModulController.FINALIZEPROTOCOL_ENDPOINT, pendingReq.getRequestID()); +					AbstractAuthProtocolModulController.FINALIZEPROTOCOL_ENDPOINT, pendingReq.getRequestID());  			response.setContentType("text/html");  			response.setStatus(302); @@ -117,11 +114,11 @@ public class FinalizeAuthenticationTask extends AbstractAuthServletTask {  			Logger.debug("REDIRECT TO: " + redirectURL);  		} catch (MOAIDException e) { -			throw new TaskExecutionException(e.getMessage(), e); +			throw new TaskExecutionException(pendingReq, e.getMessage(), e);  		} catch (Exception e) {  			Logger.warn("FinalizeAuthenticationTask has an internal error", e); -			throw new TaskExecutionException(e.getMessage(), e); +			throw new TaskExecutionException(pendingReq, e.getMessage(), e);  		} diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/GenerateBKUSelectionFrameTask.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/GenerateBKUSelectionFrameTask.java index cb0b63276..47b68bc51 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/GenerateBKUSelectionFrameTask.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/GenerateBKUSelectionFrameTask.java @@ -37,7 +37,6 @@ import at.gv.egovernment.moa.id.auth.exception.MOAIDException;  import at.gv.egovernment.moa.id.auth.modules.AbstractAuthServletTask;  import at.gv.egovernment.moa.id.auth.modules.TaskExecutionException;  import at.gv.egovernment.moa.id.config.auth.IOAAuthParameters; -import at.gv.egovernment.moa.id.moduls.IRequest;  import at.gv.egovernment.moa.id.process.api.ExecutionContext;  import at.gv.egovernment.moa.logging.Logger; @@ -55,7 +54,7 @@ public class GenerateBKUSelectionFrameTask extends AbstractAuthServletTask {  	public void execute(ExecutionContext executionContext, HttpServletRequest request, HttpServletResponse response)  			throws TaskExecutionException {  		try { -			IRequest pendingReq = requestStoreage.getPendingRequest( +			pendingReq = requestStoreage.getPendingRequest(  					(String) executionContext.get(MOAIDAuthConstants.PARAM_TARGET_PENDINGREQUESTID));  			if (pendingReq == null) { @@ -89,11 +88,11 @@ public class GenerateBKUSelectionFrameTask extends AbstractAuthServletTask {  		} catch (MOAIDException e) { -			throw new TaskExecutionException(e.getMessage(), e); +			throw new TaskExecutionException(pendingReq, e.getMessage(), e);  		} catch (Exception e) {  			Logger.warn("FinalizeAuthenticationTask has an internal error", e); -			throw new TaskExecutionException(e.getMessage(), e); +			throw new TaskExecutionException(pendingReq, e.getMessage(), e);  		} diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/RestartAuthProzessManagement.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/RestartAuthProzessManagement.java index d8b558846..d7859dd8b 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/RestartAuthProzessManagement.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/RestartAuthProzessManagement.java @@ -57,8 +57,9 @@ public class RestartAuthProzessManagement  extends AbstractAuthServletTask {  	@Override  	public void execute(ExecutionContext executionContext, HttpServletRequest request, HttpServletResponse response)  			throws TaskExecutionException { +		IRequest pendingReq = null;  		try { -			IRequest pendingReq = requestStoreage.getPendingRequest( +			pendingReq = requestStoreage.getPendingRequest(  					(String) executionContext.get(MOAIDAuthConstants.PARAM_TARGET_PENDINGREQUESTID));  			if (pendingReq == null) { @@ -110,11 +111,11 @@ public class RestartAuthProzessManagement  extends AbstractAuthServletTask {  		} catch (MOAIDException e) { -			throw new TaskExecutionException(e.getMessage(), e); +			throw new TaskExecutionException(pendingReq, e.getMessage(), e);  		} catch (Exception e) {  			Logger.warn("RestartAuthProzessManagement has an internal error", e); -			throw new TaskExecutionException(e.getMessage(), e); +			throw new TaskExecutionException(pendingReq, e.getMessage(), e);  		}			 diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/servlet/AbstractController.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/servlet/AbstractController.java index 887692477..acff2e40e 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/servlet/AbstractController.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/servlet/AbstractController.java @@ -52,7 +52,7 @@ import at.gv.egovernment.moa.id.config.ConfigurationException;  import at.gv.egovernment.moa.id.config.auth.AuthConfiguration;  import at.gv.egovernment.moa.id.moduls.IRequestStorage;  import at.gv.egovernment.moa.id.process.ProcessExecutionException; -import at.gv.egovernment.moa.id.protocols.AbstractProtocolModulController; +import at.gv.egovernment.moa.id.protocols.AbstractAuthProtocolModulController;  import at.gv.egovernment.moa.id.protocols.pvp2x.exceptions.AuthnRequestValidatorException;  import at.gv.egovernment.moa.id.storage.ITransactionStorage;  import at.gv.egovernment.moa.id.util.ErrorResponseUtils; @@ -78,35 +78,65 @@ public abstract class AbstractController extends MOAIDAuthConstants {  	@Autowired protected ITransactionStorage transactionStorage;  	@Autowired protected MOAReversionLogger revisionsLogger;  	@Autowired protected AuthConfiguration authConfig; -		 -	protected void handleError(String errorMessage, Throwable exceptionThrown, -			HttpServletRequest req, HttpServletResponse resp, String pendingRequestID) throws IOException { -		Throwable loggedException = extractOriginalExceptionFromProcessException(exceptionThrown); +	@ExceptionHandler({MOAIDException.class}) +	public void MOAIDExceptionHandler(HttpServletRequest req, HttpServletResponse resp, Exception e) throws IOException {				 +		Logger.error(e.getMessage() , e); +		internalMOAIDExceptionHandler(req, resp, e, true); -		if (!(loggedException instanceof MOAIDException)) { -			Logger.error("Receive an internal error: Message=" + loggedException.getMessage(), loggedException); +	} -		} else { -			if (Logger.isDebugEnabled() || Logger.isTraceEnabled()) { -				Logger.error(loggedException.getMessage(), loggedException); +	@ExceptionHandler({Exception.class}) +	public void GenericExceptionHandler(HttpServletResponse resp, Exception exception) throws IOException { +		Logger.error("Internel Server Error." , exception); +		resp.setContentType("text/html;charset=UTF-8"); +		resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Internal Server Error!" + +				"(Errorcode=9199" +				+" | Description="+ exception.getMessage() + ")"); +		return; +		 +	} -			} else { -				Logger.error(loggedException.getMessage()); +	@ExceptionHandler({IOException.class}) +	public void IOExceptionHandler(HttpServletResponse resp, IOException exception) { +		Logger.error("Internel Server Error." , exception); +		resp.setContentType("text/html;charset=UTF-8"); +		resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); +		return; +		 +	} -			}			 -		} +	protected void handleError(String errorMessage, Throwable exceptionThrown, +			HttpServletRequest req, HttpServletResponse resp, String pendingRequestID) throws IOException { -		//store error into transaction store -		try { -			String key = Random.nextRandom();			 -			transactionStorage.put(key, loggedException); +		Throwable loggedException = null; +		Throwable extractedException = extractOriginalExceptionFromProcessException(exceptionThrown); +		 +		//extract pendingRequestID and originalException if it was a TaskExecutionException +		if (extractedException instanceof TaskExecutionException) { +			//set original exception +			loggedException = ((TaskExecutionException) extractedException).getOriginalException(); -			if (key != null && MiscUtil.isNotEmpty(pendingRequestID)) { +			//set pending-request ID if it is set +			String reqID = ((TaskExecutionException) extractedException).getPendingRequestID(); +			if (MiscUtil.isNotEmpty(reqID)) +				pendingRequestID = reqID;  +						 +		} else +			loggedException = exceptionThrown; +					 +		try {			 +			//switch to protocol-finalize method to generate a protocol-specific error message  +			if (MiscUtil.isNotEmpty(pendingRequestID)) {				 +				 +				//put exception into transaction store for redirect +				String key = Random.nextRandom();			 +				transactionStorage.put(key, loggedException); +				 +				//build up redirect URL  				String redirectURL = null; -  				redirectURL = ServletUtils.getBaseUrl(req);	 -				redirectURL += "/"+AbstractProtocolModulController.FINALIZEPROTOCOL_ENDPOINT  +				redirectURL += "/"+AbstractAuthProtocolModulController.FINALIZEPROTOCOL_ENDPOINT   						+ "?" + ERROR_CODE_PARAM + "=" + key   				+ "&" + MOAIDAuthConstants.PARAM_TARGET_PENDINGREQUESTID + "=" + pendingRequestID; @@ -119,7 +149,8 @@ public abstract class AbstractController extends MOAIDAuthConstants {  				return;  			} else {	 -				//Exception can not be stored in database +				//write exception into browser window, because protocol-specific error message +				// is not possible without pendingRequest  				handleErrorNoRedirect(loggedException, req, resp, true);  			} @@ -132,8 +163,7 @@ public abstract class AbstractController extends MOAIDAuthConstants {  	} -	 -	 +		  	/**  	 * Handles all exceptions with no pending request.  	 * Therefore, the error is written to the users browser @@ -151,71 +181,36 @@ public abstract class AbstractController extends MOAIDAuthConstants {  			statisticLogger.logErrorOperation(throwable);  		//write errror to console -		Logger.error(throwable.getMessage(), throwable); +		logExceptionToTechnicalLog(throwable);  		//return error to Web browser  		if (throwable instanceof MOAIDException || throwable instanceof ProcessExecutionException) -			MOAIDExceptionHandler(req, resp, (Exception)throwable); +			internalMOAIDExceptionHandler(req, resp, (Exception)throwable, false);  		else  			GenericExceptionHandler(resp, (Exception)throwable);  	} -	@ExceptionHandler({MOAIDException.class}) -	public void MOAIDExceptionHandler(HttpServletRequest req, HttpServletResponse resp, Exception e) throws IOException {				 -		if (e instanceof ProtocolNotActiveException) { -			resp.getWriter().write(e.getMessage()); -			resp.setContentType("text/html;charset=UTF-8"); -			resp.sendError(HttpServletResponse.SC_FORBIDDEN, e.getMessage()); -		 -		} else if (e instanceof AuthnRequestValidatorException) { -			AuthnRequestValidatorException ex = (AuthnRequestValidatorException)e; -			//log Error Message -			statisticLogger.logErrorOperation(ex, ex.getErrorRequest()); -			 -			//write error message -			writeBadRequestErrorResponse(req, resp, (MOAIDException) e);			 -		 -		} else if (e instanceof InvalidProtocolRequestException) {		 -			//send error response -			writeBadRequestErrorResponse(req, resp, (MOAIDException) e); -			 -		} else if (e instanceof ConfigurationException) { -			//send HTML formated error message -			writeHTMLErrorResponse(resp, (MOAIDException) e); -		 -		} else if (e instanceof MOAIDException) { -			//send HTML formated error message -			writeHTMLErrorResponse(resp, e); -					 -		} else if (e instanceof ProcessExecutionException) { -			//send HTML formated error message -			writeHTMLErrorResponse(resp, e); -					 -		} -		 -	} +	/** +	 * Write a Exception to the MOA-ID-Auth internal technical log +	 *  +	 * @param loggedException Exception to log +	 */	 +	protected void logExceptionToTechnicalLog(Throwable loggedException) { +		if (!(loggedException instanceof MOAIDException)) { +			Logger.error("Receive an internal error: Message=" + loggedException.getMessage(), loggedException); -	@ExceptionHandler({Exception.class}) -	public void GenericExceptionHandler(HttpServletResponse resp, Exception exception) throws IOException { -		Logger.error("Internel Server Error." , exception); -		resp.setContentType("text/html;charset=UTF-8"); -		resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Internal Server Error!" + -				"(Errorcode=9199" -				+" | Description="+ exception.getMessage() + ")"); -		return; -		 -	} +		} else { +			if (Logger.isDebugEnabled() || Logger.isTraceEnabled()) { +				Logger.error(loggedException.getMessage(), loggedException); -	@ExceptionHandler({IOException.class}) -	public void IOExceptionHandler(HttpServletResponse resp, IOException exception) { -		Logger.error("Internel Server Error." , exception); -		resp.setContentType("text/html;charset=UTF-8"); -		resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); -		return; -		 -	} +			} else { +				Logger.error(loggedException.getMessage()); +			}			 +		}		 +	} +		  	private void writeBadRequestErrorResponse(HttpServletRequest req, HttpServletResponse resp, MOAIDException e) throws IOException {  		ErrorResponseUtils utils = ErrorResponseUtils.getInstance();  		String code = utils.mapInternalErrorToExternalError( @@ -295,21 +290,68 @@ public abstract class AbstractController extends MOAIDAuthConstants {  	    return errors.toString();  	} -	 +		 +	/** +	 * Extracts a TaskExecutionException of a ProcessExecutionExeception Stacktrace. +	 *  +	 * @param exception  +	 * @return Return the latest TaskExecutionExecption if exists, otherwise the latest ProcessExecutionException +	 */  	private Throwable extractOriginalExceptionFromProcessException(Throwable exception) { -		Throwable returnexception = exception; +		Throwable exholder = exception; +		TaskExecutionException taskExc = null; -		while(returnexception != null  -				&& returnexception instanceof ProcessExecutionException) { -			ProcessExecutionException procExc = (ProcessExecutionException) returnexception; +		while(exholder != null  +				&& exholder instanceof ProcessExecutionException) { +			ProcessExecutionException procExc = (ProcessExecutionException) exholder;  			if (procExc.getCause() != null &&   					procExc.getCause() instanceof TaskExecutionException) { -				TaskExecutionException taskExc = (TaskExecutionException) procExc.getCause(); -				returnexception = taskExc.getOriginalException(); +				taskExc = (TaskExecutionException) procExc.getCause(); +				exholder = taskExc.getOriginalException();  			}  		} -		return returnexception; +		if (taskExc == null) +			return exholder; +		 +		else +			return taskExc; +	} +	 +	private void internalMOAIDExceptionHandler(HttpServletRequest req, HttpServletResponse resp, Exception e, boolean writeExceptionToStatisicLog) throws IOException {				 +		if (e instanceof ProtocolNotActiveException) { +			resp.getWriter().write(e.getMessage()); +			resp.setContentType("text/html;charset=UTF-8"); +			resp.sendError(HttpServletResponse.SC_FORBIDDEN, e.getMessage()); +		 +		} else if (e instanceof AuthnRequestValidatorException) { +			AuthnRequestValidatorException ex = (AuthnRequestValidatorException)e; +			//log Error Message +			if (writeExceptionToStatisicLog) +				statisticLogger.logErrorOperation(ex, ex.getErrorRequest()); +			 +			//write error message +			writeBadRequestErrorResponse(req, resp, (MOAIDException) e);			 +		 +		} else if (e instanceof InvalidProtocolRequestException) {		 +			//send error response +			writeBadRequestErrorResponse(req, resp, (MOAIDException) e); +			 +		} else if (e instanceof ConfigurationException) { +			//send HTML formated error message +			writeHTMLErrorResponse(resp, (MOAIDException) e); +		 +		} else if (e instanceof MOAIDException) { +			//send HTML formated error message +			writeHTMLErrorResponse(resp, e); +					 +		} else if (e instanceof ProcessExecutionException) { +			//send HTML formated error message +			writeHTMLErrorResponse(resp, e); +					 +		} +		  	} +	  } diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/servlet/AbstractProcessEngineSignalController.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/servlet/AbstractProcessEngineSignalController.java index 375afca4d..2abe1582d 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/servlet/AbstractProcessEngineSignalController.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/servlet/AbstractProcessEngineSignalController.java @@ -52,6 +52,8 @@ public abstract class AbstractProcessEngineSignalController extends AbstractCont  			// wake up next task
  			processEngine.signal(pendingReq.getProcessInstanceId());
 +			//TODO:
 +			
  		} catch (Exception ex) {
  			handleError(null, ex, req, resp, pendingRequestID);
 diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/AbstractProtocolModulController.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/AbstractAuthProtocolModulController.java index de64ec98e..5341951d2 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/AbstractProtocolModulController.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/AbstractAuthProtocolModulController.java @@ -52,7 +52,7 @@ import at.gv.egovernment.moa.util.MiscUtil;   *   */ -public abstract class AbstractProtocolModulController extends AbstractController implements IModulInfo { +public abstract class AbstractAuthProtocolModulController extends AbstractController implements IModulInfo {  	public static final String FINALIZEPROTOCOL_ENDPOINT = "finalizeAuthProtocol";	 @@ -217,6 +217,9 @@ public abstract class AbstractProtocolModulController extends AbstractController  			if (handlingModule.generateErrorMessage(  					throwable, req, resp, protocolRequest)) { +				//log Error to technical log +				logExceptionToTechnicalLog(throwable); +				  				//log Error Message  				statisticLogger.logErrorOperation(throwable, protocolRequest); diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/ProtocolFinalizationController.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/ProtocolFinalizationController.java index 107212c38..8c3f2c946 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/ProtocolFinalizationController.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/ProtocolFinalizationController.java @@ -45,7 +45,7 @@ import at.gv.egovernment.moa.logging.Logger;   *   */  @Controller -public class ProtocolFinalizationController extends AbstractProtocolModulController { +public class ProtocolFinalizationController extends AbstractAuthProtocolModulController {  	@RequestMapping(value = "/finalizeAuthProtocol", method = {RequestMethod.GET})  	public void finalizeAuthProtocol(HttpServletRequest req, HttpServletResponse resp) throws MOAIDException, IOException { diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/pvp2x/PVP2XProtocol.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/pvp2x/PVP2XProtocol.java index fc4928366..6fb03a37d 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/pvp2x/PVP2XProtocol.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/pvp2x/PVP2XProtocol.java @@ -66,7 +66,7 @@ import at.gv.egovernment.moa.id.config.auth.AuthConfigurationProviderFactory;  import at.gv.egovernment.moa.id.config.auth.OAAuthParameter;  import at.gv.egovernment.moa.id.moduls.IRequest;  import at.gv.egovernment.moa.id.moduls.NoPassivAuthenticationException; -import at.gv.egovernment.moa.id.protocols.AbstractProtocolModulController; +import at.gv.egovernment.moa.id.protocols.AbstractAuthProtocolModulController;  import at.gv.egovernment.moa.id.protocols.pvp2x.binding.IEncoder;  import at.gv.egovernment.moa.id.protocols.pvp2x.binding.PostBinding;  import at.gv.egovernment.moa.id.protocols.pvp2x.binding.RedirectBinding; @@ -97,7 +97,7 @@ import at.gv.egovernment.moa.logging.Logger;  import at.gv.egovernment.moa.util.MiscUtil;  @Controller -public class PVP2XProtocol extends AbstractProtocolModulController  { +public class PVP2XProtocol extends AbstractAuthProtocolModulController  {  	public static final String NAME = PVP2XProtocol.class.getName();  	public static final String PATH = "id_pvp2x"; diff --git a/id/server/idserverlib/src/test/java/at/gv/egovernment/moa/id/process/spring/test/task/CreateSAML1AssertionTask.java b/id/server/idserverlib/src/test/java/at/gv/egovernment/moa/id/process/spring/test/task/CreateSAML1AssertionTask.java index 7490391f2..efec14f6b 100644 --- a/id/server/idserverlib/src/test/java/at/gv/egovernment/moa/id/process/spring/test/task/CreateSAML1AssertionTask.java +++ b/id/server/idserverlib/src/test/java/at/gv/egovernment/moa/id/process/spring/test/task/CreateSAML1AssertionTask.java @@ -53,7 +53,7 @@ public class CreateSAML1AssertionTask implements Task {  			executionContext.put("SAML1Assertion", IOUtils.toString(in, Charset.forName("UTF-8")));  		} catch (IOException e) { -			throw new TaskExecutionException("", e); +			throw new TaskExecutionException(null, "", e);  		}  	} diff --git a/id/server/idserverlib/src/test/java/at/gv/egovernment/moa/id/process/spring/test/task/GetIdentityLinkTask.java b/id/server/idserverlib/src/test/java/at/gv/egovernment/moa/id/process/spring/test/task/GetIdentityLinkTask.java index 90bd0a32f..30499d009 100644 --- a/id/server/idserverlib/src/test/java/at/gv/egovernment/moa/id/process/spring/test/task/GetIdentityLinkTask.java +++ b/id/server/idserverlib/src/test/java/at/gv/egovernment/moa/id/process/spring/test/task/GetIdentityLinkTask.java @@ -49,7 +49,7 @@ public class GetIdentityLinkTask implements Task {  			executionContext.put("IdentityLink", IOUtils.toString(in, Charset.forName("UTF-8")));  		} catch (IOException e) { -			throw new TaskExecutionException("", e); +			throw new TaskExecutionException(null, "", e);  		}  	} diff --git a/id/server/idserverlib/src/test/java/at/gv/egovernment/moa/id/process/spring/test/task/SignAuthBlockTask.java b/id/server/idserverlib/src/test/java/at/gv/egovernment/moa/id/process/spring/test/task/SignAuthBlockTask.java index 6d481dc01..feba11a64 100644 --- a/id/server/idserverlib/src/test/java/at/gv/egovernment/moa/id/process/spring/test/task/SignAuthBlockTask.java +++ b/id/server/idserverlib/src/test/java/at/gv/egovernment/moa/id/process/spring/test/task/SignAuthBlockTask.java @@ -51,7 +51,7 @@ public class SignAuthBlockTask implements Task {  		try (InputStream in = getClass().getResourceAsStream("SignedAuthBlock.xml")) {  			executionContext.put("SignedAuthBlock", IOUtils.toString(in, Charset.forName("UTF-8")));  		} catch (IOException e) { -			throw new TaskExecutionException("", e); +			throw new TaskExecutionException(null, "", e);  		}  	} | 
