in app/src/main/java/org/apache/roller/weblogger/ui/core/RollerSession.java [62:128]
public static RollerSession getRollerSession(HttpServletRequest request) {
RollerSession rollerSession = null;
HttpSession session = request.getSession(false);
if (session != null) {
rollerSession = (RollerSession)session.getAttribute(ROLLER_SESSION);
if (rollerSession == null) {
// Create new session if none exists
rollerSession = new RollerSession();
session.setAttribute(ROLLER_SESSION, rollerSession);
} else if (rollerSession.getAuthenticatedUser() != null) {
// Check if session is still valid in cache
RollerLoginSessionManager manager = RollerLoginSessionManager.getInstance();
String username = rollerSession.getAuthenticatedUser().getUserName();
if (manager.get(username) == null) {
rollerSession = new RollerSession();
session.setAttribute(ROLLER_SESSION, rollerSession);
}
}
Principal principal = request.getUserPrincipal();
// If we've got a principal but no user object, then attempt to get
// user object from user manager but *only* do this if we have been
// bootstrapped because under an SSO scenario we may have a
// principal even before we have been bootstrapped.
if (rollerSession.getAuthenticatedUser() == null && principal != null && WebloggerFactory.isBootstrapped()) {
try {
UserManager umgr = WebloggerFactory.getWeblogger().getUserManager();
User user = umgr.getUserByUserName(principal.getName());
// check for OpenID username (in the form of a URL)
if (user == null && principal.getName() != null && principal.getName().startsWith("http://")) {
String openidurl = principal.getName();
if (openidurl.endsWith("/")) {
openidurl = openidurl.substring(0, openidurl.length() - 1);
}
user = umgr.getUserByOpenIdUrl(openidurl);
}
// try one time to auto-provision, only happens if user==null
// which means installation has LDAP enabled in security.xml
if (user == null && WebloggerConfig.getBooleanProperty("users.ldap.autoProvision.enabled")) {
// provisioning enabled, get provisioner and execute
AutoProvision provisioner = RollerContext.getAutoProvision();
if(provisioner != null) {
boolean userProvisioned = provisioner.execute(request);
if (userProvisioned) {
// try lookup again real quick
user = umgr.getUserByUserName(principal.getName());
}
}
}
// only set authenticated user if user is enabled
if (user != null && user.getEnabled()) {
rollerSession.setAuthenticatedUser(user);
}
} catch (WebloggerException e) {
log.error("ERROR: getting user object",e);
}
}
}
return rollerSession;
}