protected Session createServiceSession()

in src/main/java/org/apache/sling/jcr/base/AbstractSlingRepository2.java [228:251]


    protected Session createServiceSession(final Iterable<String> servicePrincipalNames, final String workspaceName) throws RepositoryException {
        Set<Principal> principals = new HashSet<>();
        for (final String pName : servicePrincipalNames) {
            if (pName != null && !pName.isEmpty()) {
                principals.add(new Principal() {
                    @Override
                    public String getName() {
                        return pName;
                    }
                });
            }
        };
        Subject subject = new Subject(true, principals, Collections.emptySet(), Collections.emptySet());
        try {
            return Subject.doAsPrivileged(subject, new PrivilegedExceptionAction<Session>() {
                @Override
                public Session run() throws Exception {
                    return AbstractSlingRepository2.this.getRepository().login(null, workspaceName);
                }
            }, null);
        } catch (PrivilegedActionException e) {
            throw new RepositoryException("failed to retrieve service session.", e);
        }
    }