Skip to content

Commit

Permalink
Merge pull request #7111 from GlobalDataverseCommunityConsortium/IQSS…
Browse files Browse the repository at this point in the history
…/3254

adding support for changing sessionId at login
  • Loading branch information
kcondon committed Jul 31, 2020
2 parents a6f580f + 3ac1ed5 commit 78527a2
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 2 deletions.
4 changes: 3 additions & 1 deletion src/main/java/edu/harvard/iq/dataverse/DataverseSession.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import edu.harvard.iq.dataverse.actionlogging.ActionLogServiceBean;
import edu.harvard.iq.dataverse.authorization.users.GuestUser;
import edu.harvard.iq.dataverse.authorization.users.User;
import edu.harvard.iq.dataverse.util.SessionUtil;
import edu.harvard.iq.dataverse.util.SystemConfig;
import java.io.IOException;
import java.io.Serializable;
Expand Down Expand Up @@ -61,7 +62,8 @@ public void setUser(User aUser) {
logSvc.log(
new ActionLogRecord(ActionLogRecord.ActionType.SessionManagement,(aUser==null) ? "logout" : "login")
.setUserIdentifier((aUser!=null) ? aUser.getIdentifier() : (user!=null ? user.getIdentifier() : "") ));

//#3254 - change session id when user changes
SessionUtil.changeSessionId((HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest());
this.user = aUser;
}

Expand Down
4 changes: 3 additions & 1 deletion src/main/java/edu/harvard/iq/dataverse/LoginPage.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
import edu.harvard.iq.dataverse.settings.SettingsServiceBean;
import edu.harvard.iq.dataverse.util.BundleUtil;
import edu.harvard.iq.dataverse.util.JsfHelper;
import edu.harvard.iq.dataverse.util.SessionUtil;

import static edu.harvard.iq.dataverse.util.JsfHelper.JH;
import edu.harvard.iq.dataverse.util.SystemConfig;
import java.io.UnsupportedEncodingException;
Expand All @@ -29,6 +31,7 @@
import javax.faces.view.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;
import javax.servlet.http.HttpServletRequest;

/**
*
Expand Down Expand Up @@ -169,7 +172,6 @@ public String login() {
logger.log(Level.FINE, "User authenticated: {0}", r.getEmail());
session.setUser(r);
session.configureSessionTimeout();

if ("dataverse.xhtml".equals(redirectPage)) {
redirectPage = redirectToRoot();
}
Expand Down
32 changes: 32 additions & 0 deletions src/main/java/edu/harvard/iq/dataverse/util/SessionUtil.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package edu.harvard.iq.dataverse.util;

import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map.Entry;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

public class SessionUtil {

/**
* Changes the session id (jsessionId) - for use when the session's authority increases (i.e. at login)
* Servlet 3.1 Note: This method is needed while using Servlets 2.0. 3.1 has a HttpServletRequest.chageSessionId(); method that can be used instead.
*
* @param h the current HttpServletRequest
* e.g. for pages you can get this from (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
*/
public static void changeSessionId(HttpServletRequest h) {
HttpSession session = h.getSession(false);
HashMap<String, Object> sessionAttributes = new HashMap<String,Object>();
for(Enumeration<String> e = session.getAttributeNames();e.hasMoreElements();) {
String name = e.nextElement();
sessionAttributes.put(name, session.getAttribute(name));
}
h.getSession().invalidate();
session = h.getSession(true);
for(Entry<String, Object> entry: sessionAttributes.entrySet()) {
session.setAttribute(entry.getKey(), entry.getValue());
}
}
}

0 comments on commit 78527a2

Please sign in to comment.