+/*
+ * Copyright (C) 2007-2012 Argeo GmbH
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
package org.argeo.security.ui.rap;
import java.security.PrivilegedAction;
import org.apache.commons.logging.LogFactory;
import org.argeo.ArgeoException;
import org.argeo.eclipse.ui.ErrorFeedback;
+import org.argeo.util.LocaleUtils;
import org.eclipse.equinox.security.auth.ILoginContext;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.rwt.RWT;
/** Default session timeout is 8 hours (European working day length) */
private Integer sessionTimeout = 8 * 60 * 60;
+ /** Override to provide an application specific workbench advisor */
+ protected RapWorkbenchAdvisor createRapWorkbenchAdvisor(String username) {
+ return new RapWorkbenchAdvisor(username);
+ }
+
@Override
- public int createUI() {
+ public final int createUI() {
// Short login timeout so that the modal dialog login doesn't hang
// around too long
RWT.getRequest().getSession().setMaxInactiveInterval(loginTimeout);
+ // Try to load security context thanks to the session processing filter
HttpServletRequest httpRequest = RWT.getRequest();
HttpSession httpSession = httpRequest.getSession();
Object contextFromSessionObject = httpSession
SecurityContextHolder
.setContext((SecurityContext) contextFromSessionObject);
- if (log.isDebugEnabled())
- log.debug("THREAD=" + Thread.currentThread().getId()
- + ", sessionStore=" + RWT.getSessionStore().getId()
- + ", remote user=" + httpRequest.getRemoteUser());
+// if (log.isDebugEnabled())
+// log.debug("THREAD=" + Thread.currentThread().getId()
+// + ", sessionStore=" + RWT.getSessionStore().getId()
+// + ", remote user=" + httpRequest.getRemoteUser());
// create display
final Display display = PlatformUI.createDisplay();
loginContext.login();
subject = loginContext.getSubject();
+ // add security context to session
if (httpSession.getAttribute(SPRING_SECURITY_CONTEXT_KEY) == null)
httpSession.setAttribute(SPRING_SECURITY_CONTEXT_KEY,
SecurityContextHolder.getContext());
+ // add thread locale to RWT session
+ log.info("Locale "+LocaleUtils.threadLocale.get());
+ RWT.setLocale(LocaleUtils.threadLocale.get());
// Once the user is logged in, she can have a longer session
// timeout
try {
returnCode = Subject.doAs(subject, new PrivilegedAction<Integer>() {
public Integer run() {
- RapWorkbenchAdvisor workbenchAdvisor = new RapWorkbenchAdvisor(
- username);
+ RapWorkbenchAdvisor workbenchAdvisor = createRapWorkbenchAdvisor(username);
int result = PlatformUI.createAndRunWorkbench(display,
workbenchAdvisor);
return new Integer(result);
}
});
- logout(loginContext, username);
+ // logout(loginContext, username);
} finally {
display.dispose();
}
protected void logout(ILoginContext secureContext, String username) {
try {
+ HttpServletRequest httpRequest = RWT.getRequest();
+ HttpSession httpSession = httpRequest.getSession();
+ httpSession.setAttribute(SPRING_SECURITY_CONTEXT_KEY, null);
+ RWT.getRequest().getSession().setMaxInactiveInterval(1);
+ SecurityContextHolder.clearContext();
secureContext.logout();
log.info("Logged out " + (username != null ? username : "")
+ " (THREAD=" + Thread.currentThread().getId() + ")");