Example usage for org.apache.shiro.subject Subject runAs

List of usage examples for org.apache.shiro.subject Subject runAs

Introduction

In this page you can find the example usage for org.apache.shiro.subject Subject runAs.

Prototype

void runAs(PrincipalCollection principals) throws NullPointerException, IllegalStateException;

Source Link

Document

Allows this subject to 'run as' or 'assume' another identity indefinitely.

Usage

From source file:com.wegas.core.security.rest.UserController.java

License:MIT License

/**
 * See like an other user specified by it's jpaAccount id. Administrators
 * only.//from   w ww .ja va2  s.  c o m
 *
 * @param accountId jpaAccount id
 */
@POST
@Path("Be/{accountId: [1-9][0-9]*}")
public void runAs(@PathParam("accountId") Long accountId) {
    Subject oSubject = SecurityUtils.getSubject();

    if (oSubject.isRunAs()) {
        oSubject.releaseRunAs(); //@TODO: check shiro version > 1.2.1 (SHIRO-380)
    }
    oSubject.checkRole("Administrator");
    SimplePrincipalCollection subject = new SimplePrincipalCollection(accountId, "jpaRealm");
    oSubject.runAs(subject);
}

From source file:org.fcrepo.auth.common.AbstractPrincipalProvider.java

License:Apache License

@Override
public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain)
        throws IOException, ServletException {
    final HttpServletRequest hsRequest = (HttpServletRequest) request;
    final Subject currentUser = SecurityUtils.getSubject();
    PrincipalCollection principals = currentUser.getPrincipals();

    final Set<Principal> newPrincipals = getPrincipals(hsRequest);
    if (newPrincipals.size() > 0) {
        final Set<Principal> currentPrincipals;
        if (principals == null || principals.asList().isEmpty()) {
            log.debug("Shiro Principal object is not found!");
            currentPrincipals = newPrincipals;
        } else {/*from   ww  w .  j  ava  2  s  .c o  m*/
            currentPrincipals = new HashSet<>((Set<Principal>) principals.asSet());
            log.debug("Number of Principals already in session object: {}", currentPrincipals.size());
            currentPrincipals.addAll(newPrincipals);
        }
        log.debug("Number of Principals after processing the current request: {}", currentPrincipals.size());
        principals = new SimplePrincipalCollection(currentPrincipals, REALM_NAME);
        currentUser.runAs(principals);
    } else {
        log.debug("New Principals not found in the request!");
    }
    chain.doFilter(request, response);
}