use of org.jboss.security.RunAs in project wildfly by wildfly.
the class SimpleSecurityManager method push.
/**
* Must be called from within a privileged action.
*
* @param securityDomain
*/
public void push(final String securityDomain) {
// TODO - Handle a null securityDomain here? Yes I think so.
final SecurityContext previous = SecurityContextAssociation.getSecurityContext();
contexts.push(previous);
SecurityContext current = establishSecurityContext(securityDomain);
if (propagate && previous != null) {
current.setSubjectInfo(getSubjectInfo(previous));
current.setIncomingRunAs(previous.getOutgoingRunAs());
}
RunAs currentRunAs = current.getIncomingRunAs();
boolean trusted = currentRunAs != null && currentRunAs instanceof RunAsIdentity;
if (trusted == false) {
/*
* We should only be switching to a context based on an identity from the Remoting connection if we don't already
* have a trusted identity - this allows for beans to reauthenticate as a different identity.
*/
if (SecurityActions.remotingContextIsSet()) {
// In this case the principal and credential will not have been set to set some random values.
SecurityContextUtil util = current.getUtil();
Connection connection = SecurityActions.remotingContextGetConnection();
Principal p = null;
Object credential = null;
SecurityIdentity localIdentity = connection.getLocalIdentity();
if (localIdentity != null) {
p = new SimplePrincipal(localIdentity.getPrincipal().getName());
IdentityCredentials privateCredentials = localIdentity.getPrivateCredentials();
PasswordCredential passwordCredential = privateCredentials.getCredential(PasswordCredential.class, ClearPassword.ALGORITHM_CLEAR);
if (passwordCredential != null) {
credential = new String(passwordCredential.getPassword(ClearPassword.class).getPassword());
} else {
credential = new RemotingConnectionCredential(connection);
}
} else {
throw SecurityLogger.ROOT_LOGGER.noUserPrincipalFound();
}
SecurityActions.remotingContextClear();
util.createSubjectInfo(p, credential, null);
}
}
}
use of org.jboss.security.RunAs in project wildfly by wildfly.
the class RunAsLifecycleInterceptor method handle.
private void handle(ServletInfo servletInfo, LifecycleContext context) throws ServletException {
RunAsIdentityMetaData identity = null;
RunAs old = null;
SecurityContext sc = SecurityActions.getSecurityContext();
if (sc == null) {
context.proceed();
return;
}
try {
identity = runAsIdentityMetaDataMap.get(servletInfo.getName());
RunAsIdentity runAsIdentity = null;
if (identity != null) {
UndertowLogger.ROOT_LOGGER.tracef("%s, runAs: %s", servletInfo.getName(), identity);
runAsIdentity = new RunAsIdentity(identity.getRoleName(), identity.getPrincipalName(), identity.getRunAsRoles());
}
old = SecurityActions.setRunAsIdentity(runAsIdentity, sc);
// Perform the request
context.proceed();
} finally {
if (identity != null) {
SecurityActions.setRunAsIdentity(old, sc);
}
}
}
use of org.jboss.security.RunAs in project wildfly by wildfly.
the class SecurityActions method popRunAsIdentity.
/**
* Removes the run as identity
*
* @return the identity removed
*/
static RunAs popRunAsIdentity(final SecurityContext sc) {
if (WildFlySecurityManager.isChecking()) {
return AccessController.doPrivileged(new PrivilegedAction<RunAs>() {
@Override
public RunAs run() {
if (sc == null) {
throw UndertowLogger.ROOT_LOGGER.noSecurityContext();
}
RunAs principal = sc.getOutgoingRunAs();
sc.setOutgoingRunAs(null);
return principal;
}
});
} else {
if (sc == null) {
throw UndertowLogger.ROOT_LOGGER.noSecurityContext();
}
RunAs principal = sc.getOutgoingRunAs();
sc.setOutgoingRunAs(null);
return principal;
}
}
use of org.jboss.security.RunAs in project wildfly by wildfly.
the class SecurityActions method setRunAsIdentity.
/**
* Sets the run as identity
*
* @param principal the identity
*/
static RunAs setRunAsIdentity(final RunAs principal, final SecurityContext sc) {
if (WildFlySecurityManager.isChecking()) {
return WildFlySecurityManager.doUnchecked(new PrivilegedAction<RunAs>() {
@Override
public RunAs run() {
if (sc == null) {
throw UndertowLogger.ROOT_LOGGER.noSecurityContext();
}
RunAs old = sc.getOutgoingRunAs();
sc.setOutgoingRunAs(principal);
return old;
}
});
} else {
if (sc == null) {
throw UndertowLogger.ROOT_LOGGER.noSecurityContext();
}
RunAs old = sc.getOutgoingRunAs();
sc.setOutgoingRunAs(principal);
return old;
}
}
use of org.jboss.security.RunAs in project wildfly by wildfly.
the class SecurityContextAssociationHandler method handleRequest.
@Override
public void handleRequest(final HttpServerExchange exchange) throws Exception {
SecurityContext sc = exchange.getAttachment(UndertowSecurityAttachments.SECURITY_CONTEXT_ATTACHMENT);
RunAsIdentityMetaData identity = null;
RunAs old = null;
try {
final ServletChain servlet = exchange.getAttachment(ServletRequestContext.ATTACHMENT_KEY).getCurrentServlet();
identity = runAsIdentityMetaDataMap.get(servlet.getManagedServlet().getServletInfo().getName());
RunAsIdentity runAsIdentity = null;
if (identity != null) {
UndertowLogger.ROOT_LOGGER.tracef("%s, runAs: %s", servlet.getManagedServlet().getServletInfo().getName(), identity);
runAsIdentity = new RunAsIdentity(identity.getRoleName(), identity.getPrincipalName(), identity.getRunAsRoles());
}
old = SecurityActions.setRunAsIdentity(runAsIdentity, sc);
// Perform the request
next.handleRequest(exchange);
} finally {
if (identity != null) {
SecurityActions.setRunAsIdentity(old, sc);
}
}
}
Aggregations