瀏覽代碼

improve userhistorystore session logging

Jason Rivard 4 年之前
父節點
當前提交
f56537b79e
共有 25 個文件被更改,包括 111 次插入96 次删除
  1. 2 2
      server/src/main/java/password/pwm/PwmApplication.java
  2. 1 1
      server/src/main/java/password/pwm/config/stored/ConfigurationReader.java
  3. 1 1
      server/src/main/java/password/pwm/health/HealthMonitor.java
  4. 1 1
      server/src/main/java/password/pwm/http/servlet/DeleteAccountServlet.java
  5. 1 1
      server/src/main/java/password/pwm/http/servlet/SetupOtpServlet.java
  6. 1 1
      server/src/main/java/password/pwm/http/servlet/SetupResponsesServlet.java
  7. 1 1
      server/src/main/java/password/pwm/http/servlet/accountinfo/AccountInformationBean.java
  8. 1 1
      server/src/main/java/password/pwm/http/servlet/activation/ActivateUserServlet.java
  9. 1 1
      server/src/main/java/password/pwm/http/servlet/changepw/ChangePasswordServlet.java
  10. 1 1
      server/src/main/java/password/pwm/http/servlet/forgottenpw/ForgottenPasswordServlet.java
  11. 1 1
      server/src/main/java/password/pwm/http/servlet/forgottenpw/ForgottenPasswordUtil.java
  12. 11 11
      server/src/main/java/password/pwm/http/servlet/helpdesk/HelpdeskServlet.java
  13. 1 1
      server/src/main/java/password/pwm/http/servlet/helpdesk/HelpdeskServletUtil.java
  14. 1 1
      server/src/main/java/password/pwm/http/servlet/updateprofile/UpdateProfileServlet.java
  15. 1 1
      server/src/main/java/password/pwm/ldap/auth/LDAPAuthenticationRequest.java
  16. 14 11
      server/src/main/java/password/pwm/svc/event/AuditService.java
  17. 5 3
      server/src/main/java/password/pwm/svc/event/DatabaseUserHistory.java
  18. 7 5
      server/src/main/java/password/pwm/svc/event/LdapXmlUserHistory.java
  19. 3 2
      server/src/main/java/password/pwm/svc/event/UserHistoryStore.java
  20. 8 8
      server/src/main/java/password/pwm/svc/intruder/IntruderManager.java
  21. 2 2
      server/src/main/java/password/pwm/svc/token/TokenService.java
  22. 33 26
      server/src/main/java/password/pwm/util/java/LicenseInfoReader.java
  23. 3 3
      server/src/main/java/password/pwm/util/logging/PwmLogger.java
  24. 8 8
      server/src/main/java/password/pwm/util/operations/OtpService.java
  25. 2 2
      server/src/main/java/password/pwm/util/password/PasswordUtility.java

+ 2 - 2
server/src/main/java/password/pwm/PwmApplication.java

@@ -332,7 +332,7 @@ public class PwmApplication
                     AuditEvent.STARTUP,
                     null
             );
-            getAuditManager().submit( auditRecord );
+            getAuditManager().submit( null, auditRecord );
         }
         catch ( final PwmException e )
         {
@@ -823,7 +823,7 @@ public class PwmApplication
                 );
                 if ( getAuditManager() != null )
                 {
-                    getAuditManager().submit( auditRecord );
+                    getAuditManager().submit( null, auditRecord );
                 }
             }
             catch ( final PwmException e )

+ 1 - 1
server/src/main/java/password/pwm/config/stored/ConfigurationReader.java

@@ -275,7 +275,7 @@ public class ConfigurationReader
                     final UserIdentity userIdentity = valueMetaData.map( ValueMetaData::getUserIdentity ).orElse( null );
                     final String modifyMessage = "configuration record '" + key.getLabel( PwmConstants.DEFAULT_LOCALE )
                             + "' has been modified, new value: " + storedValue.get().toDebugString( PwmConstants.DEFAULT_LOCALE );
-                    pwmApplication.getAuditManager().submit( new AuditRecordFactory( pwmApplication ).createUserAuditRecord(
+                    pwmApplication.getAuditManager().submit( sessionLabel, new AuditRecordFactory( pwmApplication ).createUserAuditRecord(
                             AuditEvent.MODIFY_CONFIGURATION,
                             userIdentity,
                             sessionLabel,

+ 1 - 1
server/src/main/java/password/pwm/health/HealthMonitor.java

@@ -310,7 +310,7 @@ public class HealthMonitor implements PwmService
             {
                 final Instant startTime = Instant.now();
                 doHealthChecks();
-                LOGGER.trace( () -> "completed health check dredge ", () -> TimeDuration.fromCurrent( startTime ) );
+                LOGGER.trace( () -> "completed health check dredge", () -> TimeDuration.fromCurrent( startTime ) );
             }
             catch ( final Throwable e )
             {

+ 1 - 1
server/src/main/java/password/pwm/http/servlet/DeleteAccountServlet.java

@@ -184,7 +184,7 @@ public class DeleteAccountServlet extends ControlledPwmServlet
                     pwmRequest.getLabel(),
                     ProfileDefinition.DeleteAccount.toString()
             );
-            pwmRequest.getPwmApplication().getAuditManager().submit( auditRecord );
+            pwmRequest.getPwmApplication().getAuditManager().submit( pwmRequest.getLabel(), auditRecord );
         }
 
         return ProcessStatus.Continue;

+ 1 - 1
server/src/main/java/password/pwm/http/servlet/SetupOtpServlet.java

@@ -196,7 +196,7 @@ public class SetupOtpServlet extends ControlledPwmServlet
                         pwmSession.getUserInfo(),
                         pwmSession
                 );
-                pwmApplication.getAuditManager().submit( auditRecord );
+                pwmApplication.getAuditManager().submit( pwmRequest.getLabel(), auditRecord );
 
 
                 if ( pwmApplication.getStatisticsManager() != null && pwmApplication.getStatisticsManager().status() == PwmService.STATUS.OPEN )

+ 1 - 1
server/src/main/java/password/pwm/http/servlet/SetupResponsesServlet.java

@@ -223,7 +223,7 @@ public class SetupResponsesServlet extends ControlledPwmServlet
                     pwmSession.getUserInfo(),
                     pwmSession
             );
-            pwmApplication.getAuditManager().submit( auditRecord );
+            pwmApplication.getAuditManager().submit( pwmRequest.getLabel(), auditRecord );
 
             pwmRequest.sendRedirect( PwmServletDefinition.SetupResponses );
         }

+ 1 - 1
server/src/main/java/password/pwm/http/servlet/accountinfo/AccountInformationBean.java

@@ -128,7 +128,7 @@ public class AccountInformationBean implements Serializable
         final List<UserAuditRecord> auditRecords = new ArrayList<>();
         try
         {
-            auditRecords.addAll( pwmApplication.getAuditManager().readUserHistory( userInfo ) );
+            auditRecords.addAll( pwmApplication.getAuditManager().readUserHistory( sessionLabel, userInfo ) );
         }
         catch ( final PwmUnrecoverableException e )
         {

+ 1 - 1
server/src/main/java/password/pwm/http/servlet/activation/ActivateUserServlet.java

@@ -390,7 +390,7 @@ public class ActivateUserServlet extends ControlledPwmServlet
                     pwmRequest.getLabel(),
                     "ActivateUser"
             );
-            pwmRequest.getPwmApplication().getAuditManager().submit( auditRecord );
+            pwmRequest.getPwmApplication().getAuditManager().submit( pwmRequest.getLabel(), auditRecord );
         }
 
         return ProcessStatus.Continue;

+ 1 - 1
server/src/main/java/password/pwm/http/servlet/changepw/ChangePasswordServlet.java

@@ -246,7 +246,7 @@ public abstract class ChangePasswordServlet extends ControlledPwmServlet
                     pwmRequest.getLabel(),
                     "ChangePassword"
             );
-            pwmRequest.getPwmApplication().getAuditManager().submit( auditRecord );
+            pwmRequest.getPwmApplication().getAuditManager().submit( pwmRequest.getLabel(), auditRecord );
         }
 
         return ProcessStatus.Continue;

+ 1 - 1
server/src/main/java/password/pwm/http/servlet/forgottenpw/ForgottenPasswordServlet.java

@@ -940,7 +940,7 @@ public class ForgottenPasswordServlet extends ControlledPwmServlet
                     pwmRequest.getLabel(),
                     "ForgottenPassword"
             );
-            pwmRequest.getPwmApplication().getAuditManager().submit( auditRecord );
+            pwmRequest.getPwmApplication().getAuditManager().submit( pwmRequest.getLabel(), auditRecord );
         }
 
         return ProcessStatus.Continue;

+ 1 - 1
server/src/main/java/password/pwm/http/servlet/forgottenpw/ForgottenPasswordUtil.java

@@ -497,7 +497,7 @@ public class ForgottenPasswordUtil
                         userIdentity,
                         pwmRequest.getLabel()
                 );
-                pwmApplication.getAuditManager().submit( auditRecord );
+                pwmApplication.getAuditManager().submit( pwmRequest.getLabel(), auditRecord );
             }
 
             final MessageSendMethod messageSendMethod = forgottenPasswordProfile.readSettingAsEnum( PwmSetting.RECOVERY_SENDNEWPW_METHOD, MessageSendMethod.class );

+ 11 - 11
server/src/main/java/password/pwm/http/servlet/helpdesk/HelpdeskServlet.java

@@ -296,7 +296,7 @@ public class HelpdeskServlet extends ControlledPwmServlet
                         pwmSession.getSessionStateBean().getSrcAddress(),
                         pwmSession.getSessionStateBean().getSrcHostname()
                 );
-                pwmRequest.getPwmApplication().getAuditManager().submit( auditRecord );
+                pwmRequest.getPwmApplication().getAuditManager().submit( pwmRequest.getLabel(), auditRecord );
             }
             final RestResultBean restResultBean = RestResultBean.forSuccessMessage( pwmRequest.getLocale(), pwmRequest.getConfig(), Message.Success_Action, action.getName() );
 
@@ -389,7 +389,7 @@ public class HelpdeskServlet extends ControlledPwmServlet
                     pwmSession.getSessionStateBean().getSrcAddress(),
                     pwmSession.getSessionStateBean().getSrcHostname()
             );
-            pwmApplication.getAuditManager().submit( auditRecord );
+            pwmApplication.getAuditManager().submit( pwmRequest.getLabel(), auditRecord );
         }
 
         LOGGER.info( pwmRequest, () -> "user " + userIdentity + " has been deleted" );
@@ -618,7 +618,7 @@ public class HelpdeskServlet extends ControlledPwmServlet
                         pwmRequest.getLabel().getSourceAddress(),
                         pwmRequest.getLabel().getSourceHostname()
                 );
-                pwmRequest.getPwmApplication().getAuditManager().submit( auditRecord );
+                pwmRequest.getPwmApplication().getAuditManager().submit( pwmRequest.getLabel(), auditRecord );
             }
         }
         catch ( final ChaiPasswordPolicyException e )
@@ -700,7 +700,7 @@ public class HelpdeskServlet extends ControlledPwmServlet
                         pwmSession.getSessionStateBean().getSrcAddress(),
                         pwmSession.getSessionStateBean().getSrcHostname()
                 );
-                pwmRequest.getPwmApplication().getAuditManager().submit( auditRecord );
+                pwmRequest.getPwmApplication().getAuditManager().submit( pwmRequest.getLabel(), auditRecord );
 
                 StatisticsManager.incrementStat( pwmRequest, Statistic.HELPDESK_VERIFY_OTP );
                 verificationStateBean.addRecord( userIdentity, IdentityVerificationMethod.OTP );
@@ -716,7 +716,7 @@ public class HelpdeskServlet extends ControlledPwmServlet
                         pwmSession.getSessionStateBean().getSrcAddress(),
                         pwmSession.getSessionStateBean().getSrcHostname()
                 );
-                pwmRequest.getPwmApplication().getAuditManager().submit( auditRecord );
+                pwmRequest.getPwmApplication().getAuditManager().submit( pwmRequest.getLabel(), auditRecord );
             }
 
             return outputVerificationResponseBean( pwmRequest, passed, verificationStateBean );
@@ -884,7 +884,7 @@ public class HelpdeskServlet extends ControlledPwmServlet
                     pwmSession.getSessionStateBean().getSrcAddress(),
                     pwmSession.getSessionStateBean().getSrcHostname()
             );
-            pwmRequest.getPwmApplication().getAuditManager().submit( auditRecord );
+            pwmRequest.getPwmApplication().getAuditManager().submit( pwmRequest.getLabel(), auditRecord );
             verificationStateBean.addRecord( userIdentity, IdentityVerificationMethod.TOKEN );
         }
         else
@@ -898,7 +898,7 @@ public class HelpdeskServlet extends ControlledPwmServlet
                     pwmSession.getSessionStateBean().getSrcAddress(),
                     pwmSession.getSessionStateBean().getSrcHostname()
             );
-            pwmRequest.getPwmApplication().getAuditManager().submit( auditRecord );
+            pwmRequest.getPwmApplication().getAuditManager().submit( pwmRequest.getLabel(), auditRecord );
         }
 
         return outputVerificationResponseBean( pwmRequest, passed, verificationStateBean );
@@ -943,7 +943,7 @@ public class HelpdeskServlet extends ControlledPwmServlet
                         pwmRequest.getLabel().getSourceAddress(),
                         pwmRequest.getLabel().getSourceHostname()
                 );
-                pwmRequest.getPwmApplication().getAuditManager().submit( auditRecord );
+                pwmRequest.getPwmApplication().getAuditManager().submit( pwmRequest.getLabel(), auditRecord );
             }
         }
         catch ( final PwmOperationalException e )
@@ -1073,7 +1073,7 @@ public class HelpdeskServlet extends ControlledPwmServlet
                     pwmSession.getSessionStateBean().getSrcAddress(),
                     pwmSession.getSessionStateBean().getSrcHostname()
             );
-            pwmRequest.getPwmApplication().getAuditManager().submit( auditRecord );
+            pwmRequest.getPwmApplication().getAuditManager().submit( pwmRequest.getLabel(), auditRecord );
             verificationStateBean.addRecord( userIdentity, IdentityVerificationMethod.ATTRIBUTES );
         }
         else
@@ -1087,7 +1087,7 @@ public class HelpdeskServlet extends ControlledPwmServlet
                     pwmSession.getSessionStateBean().getSrcAddress(),
                     pwmSession.getSessionStateBean().getSrcHostname()
             );
-            pwmRequest.getPwmApplication().getAuditManager().submit( auditRecord );
+            pwmRequest.getPwmApplication().getAuditManager().submit( pwmRequest.getLabel(), auditRecord );
         }
 
         return outputVerificationResponseBean( pwmRequest, passed, verificationStateBean );
@@ -1169,7 +1169,7 @@ public class HelpdeskServlet extends ControlledPwmServlet
                     pwmRequest.getPwmSession().getSessionStateBean().getSrcAddress(),
                     pwmRequest.getPwmSession().getSessionStateBean().getSrcHostname()
             );
-            pwmRequest.getPwmApplication().getAuditManager().submit( auditRecord );
+            pwmRequest.getPwmApplication().getAuditManager().submit( pwmRequest.getLabel(), auditRecord );
         }
 
         final RestResultBean restResultBean = RestResultBean.forSuccessMessage( pwmRequest, Message.Success_Unknown );

+ 1 - 1
server/src/main/java/password/pwm/http/servlet/helpdesk/HelpdeskServletUtil.java

@@ -241,7 +241,7 @@ public class HelpdeskServletUtil
                 pwmRequest.getLabel().getSourceAddress(),
                 pwmRequest.getLabel().getSourceHostname()
         );
-        pwmRequest.getPwmApplication().getAuditManager().submit( auditRecord );
+        pwmRequest.getPwmApplication().getAuditManager().submit( pwmRequest.getLabel(), auditRecord );
 
         StatisticsManager.incrementStat( pwmRequest, Statistic.HELPDESK_USER_LOOKUP );
         return helpdeskDetailInfoBean;

+ 1 - 1
server/src/main/java/password/pwm/http/servlet/updateprofile/UpdateProfileServlet.java

@@ -290,7 +290,7 @@ public class UpdateProfileServlet extends ControlledPwmServlet
                     pwmRequest.getLabel(),
                     "UpdateProfile"
             );
-            pwmRequest.getPwmApplication().getAuditManager().submit( auditRecord );
+            pwmRequest.getPwmApplication().getAuditManager().submit( pwmRequest.getLabel(), auditRecord );
         }
 
         return ProcessStatus.Continue;

+ 1 - 1
server/src/main/java/password/pwm/ldap/auth/LDAPAuthenticationRequest.java

@@ -369,7 +369,7 @@ class LDAPAuthenticationRequest implements AuthenticationRequest
                 sessionLabel.getSourceAddress(),
                 sessionLabel.getSourceHostname()
         );
-        pwmApplication.getAuditManager().submit( auditRecord );
+        pwmApplication.getAuditManager().submit( sessionLabel, auditRecord );
         pwmApplication.getSessionTrackService().addRecentLogin( userIdentity );
 
 

+ 14 - 11
server/src/main/java/password/pwm/svc/event/AuditService.java

@@ -245,13 +245,16 @@ public class AuditService implements PwmService
     public List<UserAuditRecord> readUserHistory( final PwmSession pwmSession )
             throws PwmUnrecoverableException
     {
-        return readUserHistory( pwmSession.getUserInfo() );
+        return readUserHistory( pwmSession.getLabel(), pwmSession.getUserInfo() );
     }
 
-    public List<UserAuditRecord> readUserHistory( final UserInfo userInfoBean )
+    public List<UserAuditRecord> readUserHistory( final SessionLabel sessionLabel, final UserInfo userInfoBean )
             throws PwmUnrecoverableException
     {
-        return userHistoryStore.readUserHistory( userInfoBean );
+        final Instant startTime = Instant.now();
+        final List<UserAuditRecord> results = userHistoryStore.readUserHistory( sessionLabel, userInfoBean );
+        LOGGER.trace( sessionLabel, () -> "read " + results.size() + " user history records", () -> TimeDuration.fromCurrent( startTime ) );
+        return results;
     }
 
     private void sendAsEmail( final AuditRecord record )
@@ -341,10 +344,10 @@ public class AuditService implements PwmService
     {
         final AuditRecordFactory auditRecordFactory = new AuditRecordFactory( pwmApplication, pwmSession.getSessionManager().getMacroMachine( ) );
         final UserAuditRecord auditRecord = auditRecordFactory.createUserAuditRecord( auditEvent, userInfo, pwmSession );
-        submit( auditRecord );
+        submit( pwmSession.getLabel(), auditRecord );
     }
 
-    public void submit( final AuditRecord auditRecord )
+    public void submit( final SessionLabel sessionLabel, final AuditRecord auditRecord )
             throws PwmUnrecoverableException
     {
 
@@ -352,13 +355,13 @@ public class AuditService implements PwmService
 
         if ( status != STATUS.OPEN )
         {
-            LOGGER.debug( () -> "discarding audit event (AuditManager is not open); event=" + jsonRecord );
+            LOGGER.debug( sessionLabel, () -> "discarding audit event (AuditManager is not open); event=" + jsonRecord );
             return;
         }
 
         if ( auditRecord.getEventCode() == null )
         {
-            LOGGER.error( () -> "discarding audit event, missing event type; event=" + jsonRecord );
+            LOGGER.error( sessionLabel, () -> "discarding audit event, missing event type; event=" + jsonRecord );
             return;
         }
 
@@ -369,7 +372,7 @@ public class AuditService implements PwmService
         }
 
         // add to debug log
-        LOGGER.info( () -> "audit event: " + jsonRecord );
+        LOGGER.info( sessionLabel, () -> "audit event: " + jsonRecord );
 
         // add to audit db
         if ( auditVault != null )
@@ -380,7 +383,7 @@ public class AuditService implements PwmService
             }
             catch ( final PwmOperationalException e )
             {
-                LOGGER.warn( () -> "discarding audit event due to storage error: " + e.getMessage() );
+                LOGGER.warn( sessionLabel, () -> "discarding audit event due to storage error: " + e.getMessage() );
             }
         }
 
@@ -395,11 +398,11 @@ public class AuditService implements PwmService
                 final String perpetratorDN = ( ( UserAuditRecord ) auditRecord ).getPerpetratorDN();
                 if ( !StringUtil.isEmpty( perpetratorDN ) )
                 {
-                    userHistoryStore.updateUserHistory( ( UserAuditRecord ) auditRecord );
+                    userHistoryStore.updateUserHistory( sessionLabel, ( UserAuditRecord ) auditRecord );
                 }
                 else
                 {
-                    LOGGER.trace( () -> "skipping update of user history, audit record does not have a perpetratorDN: " + JsonUtil.serialize( auditRecord ) );
+                    LOGGER.trace( sessionLabel, () -> "skipping update of user history, audit record does not have a perpetratorDN: " + JsonUtil.serialize( auditRecord ) );
                 }
             }
         }

+ 5 - 3
server/src/main/java/password/pwm/svc/event/DatabaseUserHistory.java

@@ -21,6 +21,7 @@
 package password.pwm.svc.event;
 
 import password.pwm.PwmApplication;
+import password.pwm.bean.SessionLabel;
 import password.pwm.bean.UserIdentity;
 import password.pwm.error.ErrorInformation;
 import password.pwm.error.PwmError;
@@ -31,6 +32,7 @@ import password.pwm.util.db.DatabaseException;
 import password.pwm.util.db.DatabaseService;
 import password.pwm.util.db.DatabaseTable;
 import password.pwm.util.java.JsonUtil;
+import password.pwm.util.java.StringUtil;
 import password.pwm.util.logging.PwmLogger;
 
 import java.io.Serializable;
@@ -53,7 +55,7 @@ class DatabaseUserHistory implements UserHistoryStore
     }
 
     @Override
-    public void updateUserHistory( final UserAuditRecord auditRecord ) throws PwmUnrecoverableException
+    public void updateUserHistory( final SessionLabel sessionLabel, final UserAuditRecord auditRecord ) throws PwmUnrecoverableException
     {
         // user info
         final UserIdentity userIdentity;
@@ -83,7 +85,7 @@ class DatabaseUserHistory implements UserHistoryStore
     }
 
     @Override
-    public List<UserAuditRecord> readUserHistory( final UserInfo userInfo ) throws PwmUnrecoverableException
+    public List<UserAuditRecord> readUserHistory( final SessionLabel sessionLabel, final UserInfo userInfo ) throws PwmUnrecoverableException
     {
         final String userGuid = userInfo.getUserGuid();
         try
@@ -99,7 +101,7 @@ class DatabaseUserHistory implements UserHistoryStore
     private StoredHistory readStoredHistory( final String guid ) throws DatabaseException, PwmUnrecoverableException
     {
         final String str = this.databaseService.getAccessor().get( TABLE, guid );
-        if ( str == null || str.length() < 1 )
+        if ( StringUtil.isEmpty( str ) )
         {
             return new StoredHistory();
         }

+ 7 - 5
server/src/main/java/password/pwm/svc/event/LdapXmlUserHistory.java

@@ -27,6 +27,7 @@ import com.novell.ldapchai.util.ConfigObjectRecord;
 import lombok.Value;
 import password.pwm.PwmApplication;
 import password.pwm.PwmConstants;
+import password.pwm.bean.SessionLabel;
 import password.pwm.bean.UserIdentity;
 import password.pwm.config.PwmSetting;
 import password.pwm.config.profile.LdapProfile;
@@ -80,7 +81,7 @@ class LdapXmlUserHistory implements UserHistoryStore
     }
 
     @Override
-    public void updateUserHistory( final UserAuditRecord auditRecord )
+    public void updateUserHistory( final SessionLabel sessionLabel, final UserAuditRecord auditRecord )
             throws PwmUnrecoverableException
     {
         try
@@ -176,13 +177,13 @@ class LdapXmlUserHistory implements UserHistoryStore
     }
 
     @Override
-    public List<UserAuditRecord> readUserHistory( final UserInfo userInfo )
+    public List<UserAuditRecord> readUserHistory( final SessionLabel sessionLabel, final UserInfo userInfo )
             throws PwmUnrecoverableException
     {
         try
         {
             final ChaiUser theUser = pwmApplication.getProxiedChaiUser( userInfo.getUserIdentity() );
-            final StoredHistory storedHistory = readUserHistory( pwmApplication, userInfo.getUserIdentity(), theUser );
+            final StoredHistory storedHistory = readUserHistory( pwmApplication, sessionLabel, userInfo.getUserIdentity(), theUser );
             return storedHistory.asAuditRecords( userInfo );
         }
         catch ( final ChaiUnavailableException e )
@@ -193,6 +194,7 @@ class LdapXmlUserHistory implements UserHistoryStore
 
     private StoredHistory readUserHistory(
             final PwmApplication pwmApplication,
+            final SessionLabel sessionLabel,
             final UserIdentity userIdentity,
             final ChaiUser chaiUser
     )
@@ -203,7 +205,7 @@ class LdapXmlUserHistory implements UserHistoryStore
 
         if ( corAttribute == null || corAttribute.length() < 1 )
         {
-            LOGGER.trace( () -> "no user event log attribute configured, skipping read of log data" );
+            LOGGER.trace( sessionLabel, () -> "no user event log attribute configured, skipping read of log data" );
             return new StoredHistory();
         }
 
@@ -219,7 +221,7 @@ class LdapXmlUserHistory implements UserHistoryStore
         }
         catch ( final ChaiOperationException e )
         {
-            LOGGER.error( () -> "ldap error reading user event log: " + e.getMessage() );
+            LOGGER.error( sessionLabel, () -> "ldap error reading user event log: " + e.getMessage() );
         }
         return new StoredHistory();
     }

+ 3 - 2
server/src/main/java/password/pwm/svc/event/UserHistoryStore.java

@@ -20,6 +20,7 @@
 
 package password.pwm.svc.event;
 
+import password.pwm.bean.SessionLabel;
 import password.pwm.error.PwmUnrecoverableException;
 import password.pwm.ldap.UserInfo;
 
@@ -27,7 +28,7 @@ import java.util.List;
 
 public interface UserHistoryStore
 {
-    void updateUserHistory( UserAuditRecord auditRecord ) throws PwmUnrecoverableException;
+    void updateUserHistory( SessionLabel sessionLabel, UserAuditRecord auditRecord ) throws PwmUnrecoverableException;
 
-    List<UserAuditRecord> readUserHistory( UserInfo userInfo ) throws PwmUnrecoverableException;
+    List<UserAuditRecord> readUserHistory( SessionLabel sessionLabel, UserInfo userInfo ) throws PwmUnrecoverableException;
 }

+ 8 - 8
server/src/main/java/password/pwm/svc/intruder/IntruderManager.java

@@ -366,13 +366,13 @@ public class IntruderManager implements PwmService
                 final InetAddress inetAddress = InetAddress.getByName( subject );
                 if ( inetAddress.isAnyLocalAddress() || inetAddress.isLoopbackAddress() || inetAddress.isLinkLocalAddress() )
                 {
-                    LOGGER.debug( () -> "disregarding local address intruder attempt from: " + subject );
+                    LOGGER.debug( sessionLabel, () -> "disregarding local address intruder attempt from: " + subject );
                     return;
                 }
             }
             catch ( final Exception e )
             {
-                LOGGER.error( () -> "error examining address: " + subject );
+                LOGGER.error( sessionLabel, () -> "error examining address: " + subject );
             }
         }
 
@@ -387,7 +387,7 @@ public class IntruderManager implements PwmService
                     userIdentity,
                     sessionLabel
             );
-            pwmApplication.getAuditManager().submit( auditRecord );
+            pwmApplication.getAuditManager().submit( sessionLabel, auditRecord );
         }
         else
         {
@@ -397,7 +397,7 @@ public class IntruderManager implements PwmService
             messageObj.put( "subject", subject );
             final String message = JsonUtil.serializeMap( messageObj );
             final SystemAuditRecord auditRecord = new AuditRecordFactory( pwmApplication ).createSystemAuditRecord( AuditEvent.INTRUDER_ATTEMPT, message );
-            pwmApplication.getAuditManager().submit( auditRecord );
+            pwmApplication.getAuditManager().submit( sessionLabel, auditRecord );
         }
 
         try
@@ -416,7 +416,7 @@ public class IntruderManager implements PwmService
                             userIdentity,
                             sessionLabel
                     );
-                    pwmApplication.getAuditManager().submit( auditRecord );
+                    pwmApplication.getAuditManager().submit( sessionLabel, auditRecord );
                     sendAlert( manager.readIntruderRecord( subject ), sessionLabel );
                 }
                 else
@@ -427,7 +427,7 @@ public class IntruderManager implements PwmService
                     messageObj.put( "subject", subject );
                     final String message = JsonUtil.serializeMap( messageObj );
                     final SystemAuditRecord auditRecord = new AuditRecordFactory( pwmApplication ).createSystemAuditRecord( AuditEvent.INTRUDER_LOCK, message );
-                    pwmApplication.getAuditManager().submit( auditRecord );
+                    pwmApplication.getAuditManager().submit( sessionLabel, auditRecord );
                 }
 
 
@@ -488,7 +488,7 @@ public class IntruderManager implements PwmService
             }
             catch ( final PwmUnrecoverableException e )
             {
-                LOGGER.error( () -> "unable to send intruder mail, can't read userDN/ldapProfile from stored record: " + e.getMessage() );
+                LOGGER.error( sessionLabel, () -> "unable to send intruder mail, can't read userDN/ldapProfile from stored record: " + e.getMessage() );
             }
         }
     }
@@ -708,7 +708,7 @@ public class IntruderManager implements PwmService
         }
         catch ( final PwmUnrecoverableException e )
         {
-            LOGGER.error( () -> "error reading user info while sending intruder notice for user " + userIdentity + ", error: " + e.getMessage() );
+            LOGGER.error( sessionLabel, () -> "error reading user info while sending intruder notice for user " + userIdentity + ", error: " + e.getMessage() );
         }
 
     }

+ 2 - 2
server/src/main/java/password/pwm/svc/token/TokenService.java

@@ -254,7 +254,7 @@ public class TokenService implements PwmService
                 sessionLabel,
                 JsonUtil.serialize( tokenPayload )
         );
-        pwmApplication.getAuditManager().submit( auditRecord );
+        pwmApplication.getAuditManager().submit( sessionLabel, auditRecord );
         return tokenKey;
     }
 
@@ -292,7 +292,7 @@ public class TokenService implements PwmService
                 sessionLabel,
                 JsonUtil.serialize( tokenPayload )
         );
-        pwmApplication.getAuditManager().submit( auditRecord );
+        pwmApplication.getAuditManager().submit( sessionLabel, auditRecord );
 
         StatisticsManager.incrementStat( pwmApplication, Statistic.TOKENS_PASSSED );
     }

+ 33 - 26
server/src/main/java/password/pwm/util/java/LicenseInfoReader.java

@@ -30,7 +30,7 @@ import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
-import java.util.Optional;
+import java.util.stream.Collectors;
 
 public class LicenseInfoReader
 {
@@ -56,31 +56,7 @@ public class LicenseInfoReader
 
                     for ( final XmlElement dependency : dependenciesElement.getChildren( "dependency" ) )
                     {
-                        final String projectUrl = dependency.getChildText( "projectUrl" );
-                        final String name = dependency.getChildText( "name" );
-                        final String artifactId = dependency.getChildText( "artifactId" );
-                        final String version = dependency.getChildText( "version" );
-                        final String type = dependency.getChildText( "type" );
-
-                        final List<LicenseInfo> licenseInfos = new ArrayList<>();
-                        {
-                            final Optional<XmlElement> licenses = dependency.getChild( "licenses" );
-                            if ( licenses.isPresent() )
-                            {
-                                final List<XmlElement> licenseList = licenses.get().getChildren( "license" );
-                                for ( final XmlElement license : licenseList )
-                                {
-                                    final String licenseUrl = license.getChildText( "url" );
-                                    final String licenseName = license.getChildText( "name" );
-                                    final LicenseInfo licenseInfo = new LicenseInfo( licenseUrl, licenseName );
-                                    licenseInfos.add( licenseInfo );
-                                }
-                            }
-                        }
-
-                        final DependencyInfo dependencyInfo = new DependencyInfo( projectUrl, name, artifactId, version, type,
-                                Collections.unmodifiableList( licenseInfos ) );
-
+                        final DependencyInfo dependencyInfo = readDependencyInfo( dependency );
                         returnList.add( dependencyInfo );
                     }
                 }
@@ -92,9 +68,40 @@ public class LicenseInfoReader
                 throw new PwmUnrecoverableException( errorInfo );
             }
         }
+
         return Collections.unmodifiableList( returnList );
     }
 
+    private static DependencyInfo readDependencyInfo( final XmlElement dependency )
+    {
+        final String projectUrl = dependency.getChildText( "projectUrl" );
+        final String name = dependency.getChildText( "name" );
+        final String artifactId = dependency.getChildText( "artifactId" );
+        final String version = dependency.getChildText( "version" );
+        final String type = dependency.getChildText( "type" );
+
+        final List<LicenseInfo> licenseInfos = dependency.getChild( "licenses" )
+                .map( LicenseInfoReader::readLicenses )
+                .orElse( Collections.emptyList() );
+
+        return new DependencyInfo( projectUrl, name, artifactId, version, type, licenseInfos );
+    }
+
+    private static List<LicenseInfo> readLicenses( final XmlElement licenses )
+    {
+        return Collections.unmodifiableList( licenses.getChildren( "license" )
+                .stream()
+                .map( LicenseInfoReader::readLicenseInfo )
+                .collect( Collectors.toList() ) );
+    }
+
+    private static LicenseInfo readLicenseInfo( final XmlElement license )
+    {
+        final String licenseUrl = license.getChildText( "url" );
+        final String licenseName = license.getChildText( "name" );
+        return new LicenseInfo( licenseUrl, licenseName );
+    }
+
 
     @Value
     public static class DependencyInfo

+ 3 - 3
server/src/main/java/password/pwm/util/logging/PwmLogger.java

@@ -178,7 +178,7 @@ public class PwmLogger
         final CharSequence effectiveMessage = formatEffectiveMessage( message, timeDuration );
         final PwmLogEvent logEvent = PwmLogEvent.createPwmLogEvent( Instant.now(), topic, effectiveMessage.toString(), sessionLabel,
                 e, effectiveLevel );
-        doLogEvent( logEvent );
+        doLogEvent( sessionLabel, logEvent );
     }
 
     private CharSequence formatEffectiveMessage( final Supplier<CharSequence> message, final Supplier<TimeDuration> timeDuration )
@@ -195,7 +195,7 @@ public class PwmLogger
         return output;
     }
 
-    private void doLogEvent( final PwmLogEvent logEvent )
+    private void doLogEvent( final SessionLabel sessionLabel, final PwmLogEvent logEvent )
     {
         pushMessageToLog4j( logEvent );
 
@@ -226,7 +226,7 @@ public class PwmLogger
                             AuditEvent.FATAL_EVENT,
                             messageInfoStr
                     );
-                    pwmApplication.getAuditManager().submit( auditRecord );
+                    pwmApplication.getAuditManager().submit( sessionLabel, auditRecord );
                 }
             }
         }

+ 8 - 8
server/src/main/java/password/pwm/util/operations/OtpService.java

@@ -70,6 +70,7 @@ import java.util.EnumMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Supplier;
 
 /**
  * @author Menno Pieters, Jason D. Rivard
@@ -356,13 +357,12 @@ public class OtpService implements PwmService
 
         {
             final OTPUserRecord finalOtpConfig = otpConfig;
-            LOGGER.trace( sessionLabel, () -> "readOTPUserConfiguration completed in "
-                    + TimeDuration.fromCurrent( methodStartTime ).asCompactString()
-                    + ( finalOtpConfig == null
-                    ? ", no otp record found"
-                    : ", recordType=" + finalOtpConfig.getType() + ", identifier=" + finalOtpConfig.getIdentifier() + ", timestamp="
-                    + JavaHelper.toIsoDate( finalOtpConfig.getTimestamp() ) )
-            );
+            final Supplier<CharSequence> msg = () -> finalOtpConfig == null
+                    ? "no otp record found for user " + userIdentity.toDisplayString()
+                    : "loaded otp record for user " + userIdentity.toDisplayString()
+                    + " [recordType=" + finalOtpConfig.getType() + ", identifier=" + finalOtpConfig.getIdentifier() + ", timestamp="
+                    + JavaHelper.toIsoDate( finalOtpConfig.getTimestamp() ) + "]";
+            LOGGER.trace( sessionLabel, msg, () -> TimeDuration.fromCurrent(  methodStartTime ) );
         }
         return otpConfig;
     }
@@ -464,7 +464,7 @@ public class OtpService implements PwmService
                 }
                 else
                 {
-                    LOGGER.warn( pwmRequest, () -> String.format( "Storage location %s not implemented", otpSecretStorageLocation.toString() ) );
+                    LOGGER.warn( pwmRequest, () -> String.format( "storage location %s not implemented", otpSecretStorageLocation.toString() ) );
                 }
             }
         }

+ 2 - 2
server/src/main/java/password/pwm/util/password/PasswordUtility.java

@@ -540,7 +540,7 @@ public class PasswordUtility
                     pwmRequest.getPwmSession().getSessionStateBean().getSrcAddress(),
                     pwmRequest.getPwmSession().getSessionStateBean().getSrcHostname()
             );
-            pwmApplication.getAuditManager().submit( auditRecord );
+            pwmApplication.getAuditManager().submit( pwmRequest.getLabel(), auditRecord );
         }
 
         // update statistics
@@ -592,7 +592,7 @@ public class PasswordUtility
                     pwmRequest.getPwmSession().getSessionStateBean().getSrcAddress(),
                     pwmRequest.getPwmSession().getSessionStateBean().getSrcHostname()
             );
-            pwmApplication.getAuditManager().submit( auditRecord );
+            pwmApplication.getAuditManager().submit( sessionLabel, auditRecord );
         }
 
         // send email notification