Index: lams_central/src/java/org/lamsfoundation/lams/security/LDAPAuthenticator.java =================================================================== diff -u -r6cea41c13ae7d7ef330284fa195209b9c201e5d2 -r5806f7835e004132c37781df113fa0c879287065 --- lams_central/src/java/org/lamsfoundation/lams/security/LDAPAuthenticator.java (.../LDAPAuthenticator.java) (revision 6cea41c13ae7d7ef330284fa195209b9c201e5d2) +++ lams_central/src/java/org/lamsfoundation/lams/security/LDAPAuthenticator.java (.../LDAPAuthenticator.java) (revision 5806f7835e004132c37781df113fa0c879287065) @@ -63,7 +63,7 @@ private UserManagementService getService() { if (LDAPAuthenticator.service == null) { - WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(SessionManager.getSession() + WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(SessionManager .getServletContext()); LDAPAuthenticator.service = (UserManagementService) ctx.getBean("userManagementService"); } @@ -72,7 +72,7 @@ private LdapService getLdapService() { if (LDAPAuthenticator.ldapService == null) { - WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(SessionManager.getSession() + WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(SessionManager .getServletContext()); LDAPAuthenticator.ldapService = (LdapService) ctx.getBean("ldapService"); } Index: lams_central/src/java/org/lamsfoundation/lams/security/UniversalLoginModule.java =================================================================== diff -u -r6cea41c13ae7d7ef330284fa195209b9c201e5d2 -r5806f7835e004132c37781df113fa0c879287065 --- lams_central/src/java/org/lamsfoundation/lams/security/UniversalLoginModule.java (.../UniversalLoginModule.java) (revision 6cea41c13ae7d7ef330284fa195209b9c201e5d2) +++ lams_central/src/java/org/lamsfoundation/lams/security/UniversalLoginModule.java (.../UniversalLoginModule.java) (revision 5806f7835e004132c37781df113fa0c879287065) @@ -64,7 +64,6 @@ import org.lamsfoundation.lams.util.ConfigurationKeys; import org.lamsfoundation.lams.util.HashUtil; import org.lamsfoundation.lams.web.session.SessionManager; -import org.lamsfoundation.lams.web.util.HttpSessionManager; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; @@ -109,7 +108,7 @@ UniversalLoginModule.log.debug("===> authenticating user: " + username); WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(SessionManager - .getSession().getServletContext()); + .getServletContext()); if (service == null) { service = (UserManagementService) ctx.getBean("userManagementService"); Index: lams_central/src/java/org/lamsfoundation/lams/security/WebAuthServlet.java =================================================================== diff -u -r54f5e17d1a5e8baae23bb9332f83ad8d8e5ac405 -r5806f7835e004132c37781df113fa0c879287065 --- lams_central/src/java/org/lamsfoundation/lams/security/WebAuthServlet.java (.../WebAuthServlet.java) (revision 54f5e17d1a5e8baae23bb9332f83ad8d8e5ac405) +++ lams_central/src/java/org/lamsfoundation/lams/security/WebAuthServlet.java (.../WebAuthServlet.java) (revision 5806f7835e004132c37781df113fa0c879287065) @@ -62,7 +62,7 @@ } else { - WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext()); + WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(this.getServletContext()); UserManagementService service = (UserManagementService)ctx.getBean("userManagementService"); User webAuthUser = service.getUserByLogin(webAuthUserID); Index: lams_central/src/java/org/lamsfoundation/lams/web/LessonOrderServlet.java =================================================================== diff -u -r6cea41c13ae7d7ef330284fa195209b9c201e5d2 -r5806f7835e004132c37781df113fa0c879287065 --- lams_central/src/java/org/lamsfoundation/lams/web/LessonOrderServlet.java (.../LessonOrderServlet.java) (revision 6cea41c13ae7d7ef330284fa195209b9c201e5d2) +++ lams_central/src/java/org/lamsfoundation/lams/web/LessonOrderServlet.java (.../LessonOrderServlet.java) (revision 5806f7835e004132c37781df113fa0c879287065) @@ -67,7 +67,7 @@ Integer orgId = WebUtil.readIntParam(request, "orgId", false); String ids = request.getParameter("ids"); - WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(SessionManager.getSession().getServletContext()); + WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(this.getServletContext()); UserManagementService service = (UserManagementService) ctx.getBean("userManagementService"); if (orgId != null && ids != null) { Index: lams_central/src/java/org/lamsfoundation/lams/web/SessionListener.java =================================================================== diff -u -r6cea41c13ae7d7ef330284fa195209b9c201e5d2 -r5806f7835e004132c37781df113fa0c879287065 --- lams_central/src/java/org/lamsfoundation/lams/web/SessionListener.java (.../SessionListener.java) (revision 6cea41c13ae7d7ef330284fa195209b9c201e5d2) +++ lams_central/src/java/org/lamsfoundation/lams/web/SessionListener.java (.../SessionListener.java) (revision 5806f7835e004132c37781df113fa0c879287065) @@ -23,31 +23,48 @@ /* $$Id$$ */ package org.lamsfoundation.lams.web; +import java.util.Locale; + +import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; +import javax.servlet.jsp.jstl.core.Config; -import org.lamsfoundation.lams.web.util.HttpSessionManager; +import org.lamsfoundation.lams.util.Configuration; +import org.lamsfoundation.lams.util.ConfigurationKeys; +import org.lamsfoundation.lams.web.filter.LocaleFilter; /** - * Listens for the creation and destruction of http sessions. + * Listens for creation of HTTP sessions. Sets inactive timeout and default locale. */ -/* Should come out in web.xml as: - * - * - * - * org.lamsfoundation.lams.web.SessionListener - * - * - */ + public class SessionListener implements HttpSessionListener { + private static int timeout; //in seconds + static { + SessionListener.timeout = Configuration.getAsInt(ConfigurationKeys.INACTIVE_TIME); + } + /** HttpSessionListener interface */ @Override - public void sessionCreated(HttpSessionEvent se) { - HttpSessionManager.sessionCreated(se); + public void sessionCreated(HttpSessionEvent sessionEvent) { + if (sessionEvent == null) { + return; + } + HttpSession session = sessionEvent.getSession(); + session.setMaxInactiveInterval(SessionListener.timeout); + + //set server default locale for STURTS and JSTL. This value should be overwrite + //LocaleFilter class. But this part code can cope with login.jsp Locale. + if (session != null) { + Locale preferredLocale = new Locale(Configuration.get(ConfigurationKeys.SERVER_LANGUAGE)); + if (preferredLocale != null) { + session.setAttribute(LocaleFilter.PREFERRED_LOCALE_KEY, preferredLocale); + Config.set(session, Config.FMT_LOCALE, preferredLocale); + } + } } - /** HttpSessionListener interface */ @Override public void sessionDestroyed(HttpSessionEvent se) { //nothing to do Index: lams_central/src/java/org/lamsfoundation/lams/web/UpdateCollapsedGroupServlet.java =================================================================== diff -u -r6cea41c13ae7d7ef330284fa195209b9c201e5d2 -r5806f7835e004132c37781df113fa0c879287065 --- lams_central/src/java/org/lamsfoundation/lams/web/UpdateCollapsedGroupServlet.java (.../UpdateCollapsedGroupServlet.java) (revision 6cea41c13ae7d7ef330284fa195209b9c201e5d2) +++ lams_central/src/java/org/lamsfoundation/lams/web/UpdateCollapsedGroupServlet.java (.../UpdateCollapsedGroupServlet.java) (revision 5806f7835e004132c37781df113fa0c879287065) @@ -56,7 +56,7 @@ Integer orgId = WebUtil.readIntParam(request, "orgId", false); String collapsed = request.getParameter("collapsed"); - WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(SessionManager.getSession() + WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(SessionManager .getServletContext()); UserManagementService service = (UserManagementService) ctx.getBean("userManagementService"); Index: lams_central/src/java/org/lamsfoundation/lams/webservice/PresenceChatAction.java =================================================================== diff -u -r6cea41c13ae7d7ef330284fa195209b9c201e5d2 -r5806f7835e004132c37781df113fa0c879287065 --- lams_central/src/java/org/lamsfoundation/lams/webservice/PresenceChatAction.java (.../PresenceChatAction.java) (revision 6cea41c13ae7d7ef330284fa195209b9c201e5d2) +++ lams_central/src/java/org/lamsfoundation/lams/webservice/PresenceChatAction.java (.../PresenceChatAction.java) (revision 5806f7835e004132c37781df113fa0c879287065) @@ -229,7 +229,7 @@ private IPresenceChatService getPresenceChatService() { if (PresenceChatAction.presenceChatService == null) { - WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(SessionManager.getSession() + WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(SessionManager .getServletContext()); PresenceChatAction.presenceChatService = (IPresenceChatService) ctx.getBean("presenceChatService"); } Fisheye: Tag 5806f7835e004132c37781df113fa0c879287065 refers to a dead (removed) revision in file `lams_common/src/java/org/lamsfoundation/lams/integration/security/LoginRequestValve.java'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_common/src/java/org/lamsfoundation/lams/integration/security/SsoHandler.java =================================================================== diff -u -r6cea41c13ae7d7ef330284fa195209b9c201e5d2 -r5806f7835e004132c37781df113fa0c879287065 --- lams_common/src/java/org/lamsfoundation/lams/integration/security/SsoHandler.java (.../SsoHandler.java) (revision 6cea41c13ae7d7ef330284fa195209b9c201e5d2) +++ lams_common/src/java/org/lamsfoundation/lams/integration/security/SsoHandler.java (.../SsoHandler.java) (revision 5806f7835e004132c37781df113fa0c879287065) @@ -60,6 +60,9 @@ @Override public void handleDeployment(final DeploymentInfo deploymentInfo, final ServletContext servletContext) { + // expose servlet context so other classes can use it + SessionManager.setServletContext(servletContext); + // run when request and response were already parsed, but before security handlers deploymentInfo.addOuterHandlerChainWrapper(new HandlerWrapper() { @Override Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java =================================================================== diff -u -r6cea41c13ae7d7ef330284fa195209b9c201e5d2 -r5806f7835e004132c37781df113fa0c879287065 --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java (.../UserManagementService.java) (revision 6cea41c13ae7d7ef330284fa195209b9c201e5d2) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java (.../UserManagementService.java) (revision 5806f7835e004132c37781df113fa0c879287065) @@ -109,7 +109,7 @@ private IAuditService getAuditService() { if (UserManagementService.auditService == null) { - WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(SessionManager.getSession() + WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(SessionManager .getServletContext()); UserManagementService.auditService = (IAuditService) ctx.getBean("auditService"); } Index: lams_common/src/java/org/lamsfoundation/lams/util/LanguageUtil.java =================================================================== diff -u -r6cea41c13ae7d7ef330284fa195209b9c201e5d2 -r5806f7835e004132c37781df113fa0c879287065 --- lams_common/src/java/org/lamsfoundation/lams/util/LanguageUtil.java (.../LanguageUtil.java) (revision 6cea41c13ae7d7ef330284fa195209b9c201e5d2) +++ lams_common/src/java/org/lamsfoundation/lams/util/LanguageUtil.java (.../LanguageUtil.java) (revision 5806f7835e004132c37781df113fa0c879287065) @@ -54,7 +54,7 @@ private static IUserManagementService getService() { if (LanguageUtil.service == null) { - WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(SessionManager.getSession() + WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(SessionManager .getServletContext()); LanguageUtil.service = (IUserManagementService) ctx.getBean("userManagementService"); } Index: lams_common/src/java/org/lamsfoundation/lams/util/NumberUtil.java =================================================================== diff -u -r6e0c7a759490988dc0e6e7b4a7952162d5942e7e -r5806f7835e004132c37781df113fa0c879287065 --- lams_common/src/java/org/lamsfoundation/lams/util/NumberUtil.java (.../NumberUtil.java) (revision 6e0c7a759490988dc0e6e7b4a7952162d5942e7e) +++ lams_common/src/java/org/lamsfoundation/lams/util/NumberUtil.java (.../NumberUtil.java) (revision 5806f7835e004132c37781df113fa0c879287065) @@ -25,109 +25,105 @@ import java.text.NumberFormat; import java.text.ParsePosition; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; import java.util.Locale; -import java.util.Map; -import java.util.TimeZone; -import org.apache.commons.lang.StringUtils; -import org.apache.struts.action.ActionMessage; -import org.apache.struts.action.ActionMessages; -import org.lamsfoundation.lams.usermanagement.SupportedLocale; -import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; -import org.lamsfoundation.lams.web.util.HttpSessionManager; -import org.springframework.web.context.WebApplicationContext; -import org.springframework.web.context.support.WebApplicationContextUtils; - - /** * Various internationalisation (internationalization) utilities for numbers - * + * * @author Fiona Malikoff * */ public class NumberUtil { - private static Locale getServerLocale() { - String defaults[] = LanguageUtil.getDefaultLangCountry(); - return new Locale(defaults[0]!=null?defaults[0]:"", defaults[1]!=null?defaults[1]:""); - } - - /** Format a given float or double to the I18N format specified by the locale. If no locale supplied, uses LAMS server's default locale. - * @param mark - * @param locale - * @param numFractionDigits - * @return - */ - public static String formatLocalisedNumber(Number number, Locale locale, int numFractionDigits) { - NumberFormat format = null; - if ( locale == null ) { - format = NumberFormat.getInstance(getServerLocale()); - } else { - format = NumberFormat.getInstance(locale); - } - return formatLocalisedNumber(number, format, numFractionDigits); - } + private static Locale getServerLocale() { + String defaults[] = LanguageUtil.getDefaultLangCountry(); + return new Locale(defaults[0] != null ? defaults[0] : "", defaults[1] != null ? defaults[1] : ""); + } - /** Format a given float or double to the I18N format specified by the numberFormat. If no numberFormat supplied, - * uses LAMS server's default numberFormat based on the server locale. - * @param mark - * @param locale - * @param numFractionDigits - * @return - */ - public static String formatLocalisedNumber(Number number, NumberFormat numberFormat, int numFractionDigits) { - NumberFormat format = numberFormat != null ? numberFormat : NumberFormat.getInstance(); - format.setMaximumFractionDigits(numFractionDigits); - return format.format(number); + /** + * Format a given float or double to the I18N format specified by the locale. If no locale supplied, uses LAMS + * server's default locale. + * + * @param mark + * @param locale + * @param numFractionDigits + * @return + */ + public static String formatLocalisedNumber(Number number, Locale locale, int numFractionDigits) { + NumberFormat format = null; + if (locale == null) { + format = NumberFormat.getInstance(NumberUtil.getServerLocale()); + } else { + format = NumberFormat.getInstance(locale); } + return NumberUtil.formatLocalisedNumber(number, format, numFractionDigits); + } - /** Convert a string back into a Float. Assumes string was formatted using formatLocalisedNumber originally. Should - * ensure that it is using the same locale/number format as when it was formatted. If no locale is suppied, it - * will use the server's locale - * - * Need to strip out any spaces as spaces are valid group separators in some European locales (e.g. Polish) - * but they seem to come back from Firefox as a plain space rather than the special separating space. - */ - public static Float getLocalisedFloat(String inputStr, Locale locale) { - String numberStr = inputStr; - if ( numberStr != null ) - numberStr = numberStr.replace(" ", ""); - if ( numberStr != null && numberStr.length() > 0 ) { - Locale useLocale = locale != null ? locale : getServerLocale(); - NumberFormat format = NumberFormat.getInstance(useLocale); - ParsePosition pp = new ParsePosition(0); - Number num = format.parse(numberStr, pp); - if ( num != null && pp.getIndex() == numberStr.length() ) { - return num.floatValue(); - } - } - throw new NumberFormatException("Unable to convert number "+numberStr+"to float using locale "+locale.getCountry()+" "+locale.getLanguage()); + /** + * Format a given float or double to the I18N format specified by the numberFormat. If no numberFormat supplied, + * uses LAMS server's default numberFormat based on the server locale. + * + * @param mark + * @param locale + * @param numFractionDigits + * @return + */ + public static String formatLocalisedNumber(Number number, NumberFormat numberFormat, int numFractionDigits) { + NumberFormat format = numberFormat != null ? numberFormat : NumberFormat.getInstance(); + format.setMaximumFractionDigits(numFractionDigits); + return format.format(number); + } + + /** + * Convert a string back into a Float. Assumes string was formatted using formatLocalisedNumber originally. Should + * ensure that it is using the same locale/number format as when it was formatted. If no locale is suppied, it will + * use the server's locale + * + * Need to strip out any spaces as spaces are valid group separators in some European locales (e.g. Polish) but they + * seem to come back from Firefox as a plain space rather than the special separating space. + */ + public static Float getLocalisedFloat(String inputStr, Locale locale) { + String numberStr = inputStr; + if (numberStr != null) { + numberStr = numberStr.replace(" ", ""); } + if ((numberStr != null) && (numberStr.length() > 0)) { + Locale useLocale = locale != null ? locale : NumberUtil.getServerLocale(); + NumberFormat format = NumberFormat.getInstance(useLocale); + ParsePosition pp = new ParsePosition(0); + Number num = format.parse(numberStr, pp); + if ((num != null) && (pp.getIndex() == numberStr.length())) { + return num.floatValue(); + } + } + throw new NumberFormatException("Unable to convert number " + numberStr + "to float using locale " + + locale.getCountry() + " " + locale.getLanguage()); + } - /** Convert a string back into a Float. Assumes string was formatted using formatLocalisedNumber originally. Should - * ensure that it is using the same locale/number format as when it was formatted. If no locale is suppied, it - * will use the server's locale. - * - * Need to strip out any spaces as spaces are valid group separators in some European locales (e.g. Polish) - * but they seem to come back from Firefox as a plain space rather than the special separating space. - */ - public static Double getLocalisedDouble(String inputStr, Locale locale) { - String numberStr = inputStr; - if ( numberStr != null ) - numberStr = numberStr.replace(" ", ""); - if ( numberStr != null && numberStr.length() > 0 ) { - Locale useLocale = locale != null ? locale : getServerLocale(); - NumberFormat format = NumberFormat.getInstance(useLocale); - ParsePosition pp = new ParsePosition(0); - Number num = format.parse(numberStr, pp); - if ( num != null && pp.getIndex() == numberStr.length() ) { - return num.doubleValue(); - } - } - throw new NumberFormatException("Unable to convert number "+numberStr+"to double using locale "+locale.getCountry()+" "+locale.getLanguage()); + /** + * Convert a string back into a Float. Assumes string was formatted using formatLocalisedNumber originally. Should + * ensure that it is using the same locale/number format as when it was formatted. If no locale is suppied, it will + * use the server's locale. + * + * Need to strip out any spaces as spaces are valid group separators in some European locales (e.g. Polish) but they + * seem to come back from Firefox as a plain space rather than the special separating space. + */ + public static Double getLocalisedDouble(String inputStr, Locale locale) { + String numberStr = inputStr; + if (numberStr != null) { + numberStr = numberStr.replace(" ", ""); } + if ((numberStr != null) && (numberStr.length() > 0)) { + Locale useLocale = locale != null ? locale : NumberUtil.getServerLocale(); + NumberFormat format = NumberFormat.getInstance(useLocale); + ParsePosition pp = new ParsePosition(0); + Number num = format.parse(numberStr, pp); + if ((num != null) && (pp.getIndex() == numberStr.length())) { + return num.doubleValue(); + } + } + throw new NumberFormatException("Unable to convert number " + numberStr + "to double using locale " + + locale.getCountry() + " " + locale.getLanguage()); + } } Fisheye: Tag 5806f7835e004132c37781df113fa0c879287065 refers to a dead (removed) revision in file `lams_common/src/java/org/lamsfoundation/lams/web/session/LoginFormAuthenticator.java'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_common/src/java/org/lamsfoundation/lams/web/session/SessionManager.java =================================================================== diff -u -r6cea41c13ae7d7ef330284fa195209b9c201e5d2 -r5806f7835e004132c37781df113fa0c879287065 --- lams_common/src/java/org/lamsfoundation/lams/web/session/SessionManager.java (.../SessionManager.java) (revision 6cea41c13ae7d7ef330284fa195209b9c201e5d2) +++ lams_common/src/java/org/lamsfoundation/lams/web/session/SessionManager.java (.../SessionManager.java) (revision 5806f7835e004132c37781df113fa0c879287065) @@ -26,33 +26,22 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; public class SessionManager { public static final String SYS_SESSION_COOKIE = "JSESSIONID"; - + // singleton private static SessionManager sessionManager; private static final Map sessionContainer = new ConcurrentHashMap(); private ThreadLocal currentSessionIdContainer = new ThreadLocal(); - /** - * Get system level HttpSession by current session id. - */ - public static HttpSession getSession() { - String sessionId = SessionManager.sessionManager.currentSessionIdContainer.get(); - return SessionManager.getSession(sessionId); - } + // various classes need to have to access to it + private static ServletContext servletContext; /** - * Get system session by given session id. - */ - public static HttpSession getSession(String sessionId) { - return sessionId == null ? null : SessionManager.sessionContainer.get(sessionId); - } - - /** * This class initialize method called by Spring framework. */ public void init() { @@ -86,4 +75,27 @@ public static void endSession() { SessionManager.sessionManager.currentSessionIdContainer.set(null); } + + /** + * Get system level HttpSession by current session id. + */ + public static HttpSession getSession() { + String sessionId = SessionManager.sessionManager.currentSessionIdContainer.get(); + return SessionManager.getSession(sessionId); + } + + /** + * Get system session by given session id. + */ + public static HttpSession getSession(String sessionId) { + return sessionId == null ? null : SessionManager.sessionContainer.get(sessionId); + } + + public static void setServletContext(ServletContext servletContext) { + SessionManager.servletContext = servletContext; + } + + public static ServletContext getServletContext() { + return SessionManager.servletContext; + } } \ No newline at end of file Fisheye: Tag 5806f7835e004132c37781df113fa0c879287065 refers to a dead (removed) revision in file `lams_common/src/java/org/lamsfoundation/lams/web/session/SessionVisitor.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 5806f7835e004132c37781df113fa0c879287065 refers to a dead (removed) revision in file `lams_common/src/java/org/lamsfoundation/lams/web/util/HttpSessionManager.java'. Fisheye: No comparison available. Pass `N' to diff?