File tree Expand file tree Collapse file tree
src/main/java/edu/harvard/iq/dataverse Expand file tree Collapse file tree Original file line number Diff line number Diff line change 66import edu .harvard .iq .dataverse .actionlogging .ActionLogServiceBean ;
77import edu .harvard .iq .dataverse .authorization .users .GuestUser ;
88import edu .harvard .iq .dataverse .authorization .users .User ;
9+ import edu .harvard .iq .dataverse .util .SessionUtil ;
910import edu .harvard .iq .dataverse .util .SystemConfig ;
1011import java .io .IOException ;
1112import java .io .Serializable ;
@@ -61,7 +62,8 @@ public void setUser(User aUser) {
6162 logSvc .log (
6263 new ActionLogRecord (ActionLogRecord .ActionType .SessionManagement ,(aUser ==null ) ? "logout" : "login" )
6364 .setUserIdentifier ((aUser !=null ) ? aUser .getIdentifier () : (user !=null ? user .getIdentifier () : "" ) ));
64-
65+ //#3254 - change session id when user changes
66+ SessionUtil .changeSessionId ((HttpServletRequest ) FacesContext .getCurrentInstance ().getExternalContext ().getRequest ());
6567 this .user = aUser ;
6668 }
6769
Original file line number Diff line number Diff line change 1313import edu .harvard .iq .dataverse .settings .SettingsServiceBean ;
1414import edu .harvard .iq .dataverse .util .BundleUtil ;
1515import edu .harvard .iq .dataverse .util .JsfHelper ;
16+ import edu .harvard .iq .dataverse .util .SessionUtil ;
17+
1618import static edu .harvard .iq .dataverse .util .JsfHelper .JH ;
1719import edu .harvard .iq .dataverse .util .SystemConfig ;
1820import java .io .UnsupportedEncodingException ;
2931import javax .faces .view .ViewScoped ;
3032import javax .inject .Inject ;
3133import javax .inject .Named ;
34+ import javax .servlet .http .HttpServletRequest ;
3235
3336/**
3437 *
@@ -169,7 +172,6 @@ public String login() {
169172 logger .log (Level .FINE , "User authenticated: {0}" , r .getEmail ());
170173 session .setUser (r );
171174 session .configureSessionTimeout ();
172-
173175 if ("dataverse.xhtml" .equals (redirectPage )) {
174176 redirectPage = redirectToRoot ();
175177 }
Original file line number Diff line number Diff line change 1+ package edu .harvard .iq .dataverse .util ;
2+
3+ import java .util .Enumeration ;
4+ import java .util .HashMap ;
5+ import java .util .Map .Entry ;
6+
7+ import javax .servlet .http .HttpServletRequest ;
8+ import javax .servlet .http .HttpSession ;
9+
10+ public class SessionUtil {
11+
12+ /**
13+ * Changes the session id (jsessionId) - for use when the session's authority increases (i.e. at login)
14+ * 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.
15+ *
16+ * @param h the current HttpServletRequest
17+ * e.g. for pages you can get this from (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
18+ */
19+ public static void changeSessionId (HttpServletRequest h ) {
20+ HttpSession session = h .getSession (false );
21+ HashMap <String , Object > sessionAttributes = new HashMap <String ,Object >();
22+ for (Enumeration <String > e = session .getAttributeNames ();e .hasMoreElements ();) {
23+ String name = e .nextElement ();
24+ sessionAttributes .put (name , session .getAttribute (name ));
25+ }
26+ h .getSession ().invalidate ();
27+ session = h .getSession (true );
28+ for (Entry <String , Object > entry : sessionAttributes .entrySet ()) {
29+ session .setAttribute (entry .getKey (), entry .getValue ());
30+ }
31+ }
32+ }
You can’t perform that action at this time.
0 commit comments