1 package org
.argeo
.security
.ui
.rap
;
3 import java
.security
.PrivilegedAction
;
5 import javax
.security
.auth
.Subject
;
6 import javax
.security
.auth
.login
.LoginException
;
8 import org
.apache
.commons
.logging
.Log
;
9 import org
.apache
.commons
.logging
.LogFactory
;
10 import org
.argeo
.eclipse
.ui
.dialogs
.Error
;
11 import org
.eclipse
.rwt
.lifecycle
.IEntryPoint
;
12 import org
.eclipse
.rwt
.service
.SessionStoreEvent
;
13 import org
.eclipse
.rwt
.service
.SessionStoreListener
;
14 import org
.eclipse
.swt
.widgets
.Display
;
15 import org
.eclipse
.ui
.PlatformUI
;
16 import org
.eclipse
.ui
.application
.IWorkbenchWindowConfigurer
;
17 import org
.eclipse
.ui
.application
.WorkbenchAdvisor
;
18 import org
.eclipse
.ui
.application
.WorkbenchWindowAdvisor
;
20 public class SecureEntryPoint
implements IEntryPoint
, SessionStoreListener
{
21 private Log log
= LogFactory
.getLog(SecureEntryPoint
.class);
24 public int createUI() {
25 // log.debug("THREAD=" + Thread.currentThread().getId()
26 // + ", RWT.getSessionStore().getId()="
27 // + RWT.getSessionStore().getId());
29 Integer returnCode
= null;
30 Display display
= PlatformUI
.createDisplay();
32 Subject subject
= null;
36 // force login in order to give Spring Security a chance to
38 SecureRapActivator
.getLoginContext().login();
39 subject
= SecureRapActivator
.getLoginContext().getSubject();
41 } catch (LoginException e
) {
42 Error
.show("Cannot login", e
);
44 } catch (Exception e
) {
45 Error
.show("Unexpected exception while trying to login", e
);
50 if (subject
!= null) {
51 returnCode
= (Integer
) Subject
.doAs(subject
,
52 getRunAction(display
));
53 SecureRapActivator
.getLoginContext().logout();
54 return processReturnCode(returnCode
);
58 } catch (Exception e
) {
59 log
.error("Unexpected error",e
);
67 @SuppressWarnings("rawtypes")
68 private PrivilegedAction
getRunAction(final Display display
) {
69 return new PrivilegedAction() {
71 int result
= createAndRunWorkbench(display
);
72 return new Integer(result
);
77 protected Integer
createAndRunWorkbench(Display display
) {
78 return PlatformUI
.createAndRunWorkbench(display
,
79 createWorkbenchAdvisor());
82 protected Integer
processReturnCode(Integer returnCode
) {
86 protected WorkbenchAdvisor
createWorkbenchAdvisor() {
87 return new SecureWorkbenchAdvisor() {
88 public WorkbenchWindowAdvisor
createWorkbenchWindowAdvisor(
89 IWorkbenchWindowConfigurer configurer
) {
90 return new RapSecureWorkbenchWindowAdvisor(configurer
);
97 public void beforeDestroy(SessionStoreEvent event
) {
98 if (log
.isDebugEnabled())
99 log
.debug("RWT session " + event
.getSessionStore().getId()
100 + " about to be destroyed. THREAD="
101 + Thread
.currentThread().getId());