publicstatic String[] getRoles(User user) {
Set<String> roles = new HashSet<>();
Iterator<Role> uroles = user.getRoles(); while (uroles.hasNext()) {
Role role = uroles.next();
roles.add(role.getName());
}
Iterator<Group> groups = user.getGroups(); while (groups.hasNext()) {
Group group = groups.next();
uroles = group.getRoles(); while (uroles.hasNext()) {
Role role = uroles.next();
roles.add(role.getName());
}
} return roles.toArray(new String[0]);
}
@Override protected Principal getPrincipal(String username) {
UserDatabase database = getUserDatabase(); if (database == null) { returnnull;
}
User user = database.findUser(username); if (user == null) { returnnull;
} else { if (useStaticPrincipal) { returnnew GenericPrincipal(username, Arrays.asList(getRoles(user)));
} else { returnnew UserDatabasePrincipal(user, database);
}
}
}
/* *Can'tdothisinstartInternal()withlocalJNDIasthelocalJNDIcontextwon'tbeinitialisedatthispoint.
*/ private UserDatabase getUserDatabase() { // DCL so database MUST be volatile if (database == null) { synchronized (databaseLock) { if (database == null) { try {
Context context = null; if (localJndiResource) {
context = ContextBindings.getClassLoader();
context = (Context) context.lookup("comp/env");
} else {
Server server = getServer(); if (server == null) {
containerLog.error(sm.getString("userDatabaseRealm.noNamingContext")); returnnull;
}
context = getServer().getGlobalNamingContext();
}
database = (UserDatabase) context.lookup(resourceName);
} catch (Throwable e) {
ExceptionUtils.handleThrowable(e); if (containerLog != null) {
containerLog.error(sm.getString("userDatabaseRealm.lookup", resourceName), e);
}
database = null;
}
}
}
} return database;
}
@Override protectedvoid startInternal() throws LifecycleException { // If the JNDI resource is global, check it here and fail the context // start if it is not valid. Local JNDI resources can't be validated // this way because the JNDI context isn't available at Realm start. if (!localJndiResource) {
UserDatabase database = getUserDatabase(); if (database == null) { thrownew LifecycleException(sm.getString("userDatabaseRealm.noDatabase", resourceName));
}
}
@Override public String[] getRoles() { if (database == null) { returnnew String[0];
}
User user = database.findUser(name); if (user == null) { returnnew String[0];
}
Set<String> roles = new HashSet<>();
Iterator<Role> uroles = user.getRoles(); while (uroles.hasNext()) {
Role role = uroles.next();
roles.add(role.getName());
}
Iterator<Group> groups = user.getGroups(); while (groups.hasNext()) {
Group group = groups.next();
uroles = group.getRoles(); while (uroles.hasNext()) {
Role role = uroles.next();
roles.add(role.getName());
}
} return roles.toArray(new String[0]);
}
@Override publicboolean hasRole(String role) { if ("*".equals(role)) { returntrue;
} elseif (role == null) { returnfalse;
} if (database == null) { returnsuper.hasRole(role);
}
Role dbrole = database.findRole(role); if (dbrole == null) { returnfalse;
}
User user = database.findUser(name); if (user == null) { returnfalse;
} if (user.isInRole(dbrole)) { returntrue;
}
Iterator<Group> groups = user.getGroups(); while (groups.hasNext()) {
Group group = groups.next(); if (group.isInRole(dbrole)) { returntrue;
}
} returnfalse;
}
/** *Magicmethodfrom{@linkjava.io.Serializable}. * *@returnTheobjecttoserializeinsteadofthisobject * *@throwsObjectStreamExceptionNotthrownbythisimplementation
*/ private Object writeReplace() throws ObjectStreamException { // Replace with a static principal disconnected from the database returnnew GenericPrincipal(getName(), Arrays.asList(getRoles()));
}
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.