aboutsummaryrefslogtreecommitdiff
path: root/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/AuthenticationSessionCleaner.java
diff options
context:
space:
mode:
Diffstat (limited to 'id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/AuthenticationSessionCleaner.java')
-rw-r--r--id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/AuthenticationSessionCleaner.java80
1 files changed, 76 insertions, 4 deletions
diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/AuthenticationSessionCleaner.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/AuthenticationSessionCleaner.java
index a1ba00e02..e0552c337 100644
--- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/AuthenticationSessionCleaner.java
+++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/AuthenticationSessionCleaner.java
@@ -4,15 +4,22 @@
package at.gv.egovernment.moa.id.auth;
import java.util.Date;
+import java.util.List;
+import org.hibernate.HibernateException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
-import at.gv.egovernment.moa.id.config.auth.AuthConfiguration;
+import at.gv.egovernment.moa.id.advancedlogging.TransactionIDUtils;
+import at.gv.egovernment.moa.id.commons.api.AuthConfiguration;
+import at.gv.egovernment.moa.id.commons.api.exceptions.MOAIDException;
+import at.gv.egovernment.moa.id.commons.utils.MOAIDMessageProvider;
+import at.gv.egovernment.moa.id.data.ExceptionContainer;
+import at.gv.egovernment.moa.id.process.ProcessExecutionException;
import at.gv.egovernment.moa.id.storage.IAuthenticationSessionStoreage;
import at.gv.egovernment.moa.id.storage.ITransactionStorage;
-import at.gv.egovernment.moa.id.util.MOAIDMessageProvider;
import at.gv.egovernment.moa.logging.Logger;
+import at.gv.egovernment.moa.util.MiscUtil;
/**
* Thread cleaning the <code>AuthenticationServer</code> session store
@@ -53,11 +60,55 @@ public class AuthenticationSessionCleaner implements Runnable {
authenticationSessionStorage.clean(now, sessionTimeOutCreated, sessionTimeOutUpdated);
//clean TransactionStorage
- transactionStorage.clean(now, authDataTimeOut);
+ List<String> entryKeysToClean = transactionStorage.clean(now, authDataTimeOut);
+ if (entryKeysToClean != null && entryKeysToClean.size() != 0) {
+ for(String entryKey : entryKeysToClean) {
+ try {
+ try {
+ Object entry = transactionStorage.get(entryKey);
+ //if entry is an exception --> log it because is could be unhandled
+ if (entry != null && entry instanceof ExceptionContainer) {
+ ExceptionContainer exContainer = (ExceptionContainer) entry;
+
+ if (exContainer.getExceptionThrown() != null) {
+ //add session and transaction ID to log if exists
+ if (MiscUtil.isNotEmpty(exContainer.getUniqueTransactionID()))
+ TransactionIDUtils.setTransactionId(exContainer.getUniqueTransactionID());
+
+ if (MiscUtil.isNotEmpty(exContainer.getUniqueSessionID()))
+ TransactionIDUtils.setSessionId(exContainer.getUniqueSessionID());
+
+ //log exception to technical log
+ logExceptionToTechnicalLog(exContainer.getExceptionThrown());
+
+ //remove session and transaction ID from thread
+ TransactionIDUtils.removeSessionId();
+ TransactionIDUtils.removeTransactionId();
+ }
+ }
+
+ } catch (Exception e) {
+ Logger.info("Transaction info is not loadable. "
+ + "Key:" + entryKey
+ + " ErrorMsg:" + e.getMessage());
+
+ }
+
+ transactionStorage.remove(entryKey);
+ Logger.info("Remove stored information with ID: " + entryKey
+ + " after timeout.");
+
+ } catch (HibernateException e){
+ Logger.warn("Transaction information with ID=" + entryKey
+ + " not removed after timeout! (Error during Database communication)", e);
+ }
+
+ }
+ }
} catch (Exception e) {
- Logger.error("Session cleanUp FAILED!" , e);
+ Logger.error("Session/Transaction cleanUp FAILED!" , e);
}
@@ -72,6 +123,27 @@ public class AuthenticationSessionCleaner implements Runnable {
}
}
+ /**
+ * 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
+ || loggedException instanceof ProcessExecutionException )) {
+ Logger.error("Receive an internal error: Message=" + loggedException.getMessage(), loggedException);
+
+ } else {
+ if (Logger.isDebugEnabled() || Logger.isTraceEnabled()) {
+ Logger.warn(loggedException.getMessage(), loggedException);
+
+ } else {
+ Logger.info(loggedException.getMessage());
+
+ }
+ }
+ }
+
/**
* start the sessionCleaner
*/