X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fkernel%2FNodeSecurity.java;h=6ad8fb15c582f61968813cfae4c0d6c7f0202788;hb=559786a622e24c7d213960a7873e105db82a03ab;hp=7c176ea89552fe1bd8a414be6c87d81a7c03a707;hpb=84591aefd3116474b79a7734b3ce5373ebdb0c29;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeSecurity.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeSecurity.java index 7c176ea89..6ad8fb15c 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeSecurity.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeSecurity.java @@ -1,6 +1,7 @@ package org.argeo.cms.internal.kernel; import javax.jcr.RepositoryException; +import javax.security.auth.spi.LoginModule; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -8,8 +9,11 @@ import org.argeo.cms.CmsException; import org.argeo.security.UserAdminService; import org.argeo.security.core.InternalAuthentication; import org.argeo.security.core.InternalAuthenticationProvider; +import org.argeo.security.core.ThreadedLoginModule; import org.argeo.security.jcr.SimpleJcrSecurityModel; import org.argeo.security.jcr.jackrabbit.JackrabbitUserAdminService; +import org.eclipse.rap.rwt.RWT; +import org.eclipse.swt.widgets.Display; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceRegistration; import org.springframework.security.authentication.AnonymousAuthenticationProvider; @@ -29,10 +33,12 @@ class NodeSecurity implements AuthenticationManager { private final InternalAuthenticationProvider internalAuth; private final AnonymousAuthenticationProvider anonymousAuth; private final JackrabbitUserAdminService jackrabbitUserAdmin; + private Login loginModule; private ServiceRegistration authenticationManagerReg; private ServiceRegistration userAdminReg; private ServiceRegistration userDetailsManagerReg; + private ServiceRegistration loginModuleReg; public NodeSecurity(BundleContext bundleContext, JackrabbitNode node) throws RepositoryException { @@ -49,6 +55,7 @@ class NodeSecurity implements AuthenticationManager { jackrabbitUserAdmin.setSecurityModel(new SimpleJcrSecurityModel()); jackrabbitUserAdmin.init(); + loginModule = new Login(); } public void publish() { @@ -61,6 +68,9 @@ class NodeSecurity implements AuthenticationManager { // userAdminReg = // bundleContext.registerService(UserDetailsService.class, // jackrabbitUserAdmin, null); + + loginModuleReg = bundleContext.registerService(LoginModule.class, + loginModule, null); } void destroy() { @@ -72,6 +82,7 @@ class NodeSecurity implements AuthenticationManager { userDetailsManagerReg.unregister(); userAdminReg.unregister(); authenticationManagerReg.unregister(); + loginModuleReg.unregister(); } @Override @@ -88,4 +99,18 @@ class NodeSecurity implements AuthenticationManager { throw new CmsException("Could not authenticate " + authentication); return auth; } + + private class Login extends ThreadedLoginModule { + + @Override + protected LoginModule createLoginModule() { + SpringLoginModule springLoginModule = new SpringLoginModule(); + springLoginModule.setAuthenticationManager(NodeSecurity.this); + if (Display.getCurrent() != null) { + + } + return springLoginModule; + } + + } }