[Fix] Use existing TX when writing audits for invalidating sessions
This commit is contained in:
parent
faf05126b4
commit
1158acfd90
|
@ -15,19 +15,6 @@
|
||||||
*/
|
*/
|
||||||
package li.strolch.runtime.privilege;
|
package li.strolch.runtime.privilege;
|
||||||
|
|
||||||
import static java.lang.Boolean.parseBoolean;
|
|
||||||
import static java.util.concurrent.TimeUnit.NANOSECONDS;
|
|
||||||
import static li.strolch.privilege.handler.PrivilegeHandler.PARAM_PERSIST_SESSIONS;
|
|
||||||
import static li.strolch.privilege.handler.PrivilegeHandler.PARAM_PERSIST_SESSIONS_PATH;
|
|
||||||
import static li.strolch.privilege.helper.XmlConstants.PARAM_BASE_PATH;
|
|
||||||
import static li.strolch.runtime.StrolchConstants.StrolchPrivilegeConstants.*;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.nio.file.Files;
|
|
||||||
import java.text.MessageFormat;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import li.strolch.agent.api.ComponentContainer;
|
import li.strolch.agent.api.ComponentContainer;
|
||||||
import li.strolch.agent.api.StrolchComponent;
|
import li.strolch.agent.api.StrolchComponent;
|
||||||
import li.strolch.agent.api.StrolchRealm;
|
import li.strolch.agent.api.StrolchRealm;
|
||||||
|
@ -48,6 +35,21 @@ import li.strolch.runtime.configuration.ComponentConfiguration;
|
||||||
import li.strolch.runtime.configuration.RuntimeConfiguration;
|
import li.strolch.runtime.configuration.RuntimeConfiguration;
|
||||||
import li.strolch.utils.helper.XmlHelper;
|
import li.strolch.utils.helper.XmlHelper;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.text.MessageFormat;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static java.lang.Boolean.parseBoolean;
|
||||||
|
import static java.util.concurrent.TimeUnit.NANOSECONDS;
|
||||||
|
import static li.strolch.persistence.api.TransactionThreadLocal.getTx;
|
||||||
|
import static li.strolch.persistence.api.TransactionThreadLocal.hasTx;
|
||||||
|
import static li.strolch.privilege.handler.PrivilegeHandler.PARAM_PERSIST_SESSIONS;
|
||||||
|
import static li.strolch.privilege.handler.PrivilegeHandler.PARAM_PERSIST_SESSIONS_PATH;
|
||||||
|
import static li.strolch.privilege.helper.XmlConstants.PARAM_BASE_PATH;
|
||||||
|
import static li.strolch.runtime.StrolchConstants.StrolchPrivilegeConstants.*;
|
||||||
|
|
||||||
public class DefaultStrolchPrivilegeHandler extends StrolchComponent implements PrivilegeHandler {
|
public class DefaultStrolchPrivilegeHandler extends StrolchComponent implements PrivilegeHandler {
|
||||||
|
|
||||||
public static final String PROP_PRIVILEGE_CONFIG_FILE = "privilegeConfigFile";
|
public static final String PROP_PRIVILEGE_CONFIG_FILE = "privilegeConfigFile";
|
||||||
|
@ -89,8 +91,7 @@ public class DefaultStrolchPrivilegeHandler extends StrolchComponent implements
|
||||||
/**
|
/**
|
||||||
* Initializes the {@link DefaultPrivilegeHandler} from the configuration file
|
* Initializes the {@link DefaultPrivilegeHandler} from the configuration file
|
||||||
*
|
*
|
||||||
* @param privilegeXmlFile
|
* @param privilegeXmlFile a {@link File} reference to the XML file containing the configuration for Privilege
|
||||||
* a {@link File} reference to the XML file containing the configuration for Privilege
|
|
||||||
*
|
*
|
||||||
* @return the initialized {@link PrivilegeHandler} where the {@link EncryptionHandler} and
|
* @return the initialized {@link PrivilegeHandler} where the {@link EncryptionHandler} and
|
||||||
* {@link PersistenceHandler} are set and initialized as well
|
* {@link PersistenceHandler} are set and initialized as well
|
||||||
|
@ -185,13 +186,17 @@ public class DefaultStrolchPrivilegeHandler extends StrolchComponent implements
|
||||||
|
|
||||||
private void writeAudit(Certificate certificate, String login, AccessType accessType, String username) {
|
private void writeAudit(Certificate certificate, String login, AccessType accessType, String username) {
|
||||||
StrolchRealm realm = getContainer().getRealm(certificate);
|
StrolchRealm realm = getContainer().getRealm(certificate);
|
||||||
try (StrolchTransaction tx = realm.openTx(certificate, login, false).silentThreshold(1, NANOSECONDS)) {
|
try (StrolchTransaction tx = hasTx() ? getTx() : openTx(certificate, login, realm)) {
|
||||||
tx.setSuppressAudits(true);
|
tx.setSuppressAudits(true);
|
||||||
Audit audit = tx.auditFrom(accessType, PRIVILEGE, CERTIFICATE, username);
|
Audit audit = tx.auditFrom(accessType, PRIVILEGE, CERTIFICATE, username);
|
||||||
tx.getAuditTrail().add(tx, audit);
|
tx.getAuditTrail().add(tx, audit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static StrolchTransaction openTx(Certificate certificate, String login, StrolchRealm realm) {
|
||||||
|
return realm.openTx(certificate, login, false).silentThreshold(1, NANOSECONDS);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PrivilegeContext validate(Certificate certificate) throws PrivilegeException {
|
public PrivilegeContext validate(Certificate certificate) throws PrivilegeException {
|
||||||
return this.privilegeHandler.validate(certificate);
|
return this.privilegeHandler.validate(certificate);
|
||||||
|
|
Loading…
Reference in New Issue