Author: aparfonov
Date: 2010-09-17 03:05:17 -0400 (Fri, 17 Sep 2010)
New Revision: 3128
Modified:
core/trunk/exo.core.component.security.core/src/main/java/org/exoplatform/services/security/Identity.java
core/trunk/exo.core.component.security.core/src/main/java/org/exoplatform/services/security/jaas/DefaultLoginModule.java
core/trunk/exo.core.component.security.core/src/main/java/org/exoplatform/services/security/jaas/IdentitySetLoginModule.java
core/trunk/exo.core.component.security.core/src/main/java/org/exoplatform/services/security/web/JAASConversationStateListener.java
core/trunk/exo.core.component.security.core/src/main/java/org/exoplatform/services/security/web/SetCurrentIdentityFilter.java
Log:
EXOJCR-964
Modified:
core/trunk/exo.core.component.security.core/src/main/java/org/exoplatform/services/security/Identity.java
===================================================================
---
core/trunk/exo.core.component.security.core/src/main/java/org/exoplatform/services/security/Identity.java 2010-09-16
18:43:44 UTC (rev 3127)
+++
core/trunk/exo.core.component.security.core/src/main/java/org/exoplatform/services/security/Identity.java 2010-09-17
07:05:17 UTC (rev 3128)
@@ -22,7 +22,6 @@
import java.util.Collection;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.Set;
import javax.security.auth.Subject;
@@ -188,6 +187,9 @@
/**
* @return @see {@link Subject} .
+ * @deprecated Do not need store subject any more. It was used before to
+ * perform logout, since tomcat 6.0.21 logout implemented in
+ * web-container.
*/
public Subject getSubject()
{
@@ -196,6 +198,7 @@
/**
* @param subject @see {@link Subject} .
+ * @deprecated See {@link #getSubject()}
*/
public void setSubject(Subject subject)
{
Modified:
core/trunk/exo.core.component.security.core/src/main/java/org/exoplatform/services/security/jaas/DefaultLoginModule.java
===================================================================
---
core/trunk/exo.core.component.security.core/src/main/java/org/exoplatform/services/security/jaas/DefaultLoginModule.java 2010-09-16
18:43:44 UTC (rev 3127)
+++
core/trunk/exo.core.component.security.core/src/main/java/org/exoplatform/services/security/jaas/DefaultLoginModule.java 2010-09-17
07:05:17 UTC (rev 3128)
@@ -34,7 +34,7 @@
/**
* Created by The eXo Platform SAS .
- *
+ *
* @author Gennady Azarenkov
* @version $Id: $
*/
@@ -66,7 +66,7 @@
}
/**
- * {@inheritDoc}
+ * {@inheritDoc}
*/
public void afterInitialize()
{
@@ -130,7 +130,7 @@
{
log.debug(e.getMessage());
}
-
+
throw new LoginException(e.getMessage());
}
}
@@ -149,6 +149,10 @@
if (singleLogin && identityRegistry.getIdentity(identity.getUserId()) !=
null)
throw new LoginException("User " + identity.getUserId() + "
already logined.");
+ // TODO Remove subject from identity if nod need it in eXo environment.
+ // Do not need implement logout by self if use tomcat 6.0.21 and later.
+ // See deprecation comments in
+ // org.exoplatform.services.security.web.JAASConversationStateListener
identity.setSubject(subject);
identityRegistry.register(identity);
Modified:
core/trunk/exo.core.component.security.core/src/main/java/org/exoplatform/services/security/jaas/IdentitySetLoginModule.java
===================================================================
---
core/trunk/exo.core.component.security.core/src/main/java/org/exoplatform/services/security/jaas/IdentitySetLoginModule.java 2010-09-16
18:43:44 UTC (rev 3127)
+++
core/trunk/exo.core.component.security.core/src/main/java/org/exoplatform/services/security/jaas/IdentitySetLoginModule.java 2010-09-17
07:05:17 UTC (rev 3128)
@@ -36,7 +36,7 @@
* Required name of user MUST be passed to LM via sharedState (see method
* {@link #initialize(Subject, CallbackHandler, Map, Map)}), with name
* javax.security.auth.login.name.
- *
+ *
* @author <a href="mailto:andrew00x@gmail.com">Andrey
Parfonov</a>
* @version $Id: $
*/
@@ -92,6 +92,10 @@
throw new LoginException("User " + userId + " already
logined.");
Identity identity = authenticator.createIdentity(userId);
+ // TODO Remove subject from identity if nod need it in eXo environment.
+ // Do not need implement logout by self if use tomcat 6.0.21 and later.
+ // See deprecation comments in
+ // org.exoplatform.services.security.web.JAASConversationStateListener
identity.setSubject(subject);
identityRegistry.register(identity);
@@ -99,7 +103,7 @@
}
catch (Exception e)
{
- e.printStackTrace();
+ log.error(e.getMessage());
throw new LoginException(e.getMessage());
}
return true;
@@ -114,7 +118,6 @@
{
log.debug("in initialize");
}
-
String sl = (String)options.get("singleLogin");
this.singleLogin = (sl != null && (sl.equalsIgnoreCase("yes") ||
sl.equalsIgnoreCase("true")));
}
Modified:
core/trunk/exo.core.component.security.core/src/main/java/org/exoplatform/services/security/web/JAASConversationStateListener.java
===================================================================
---
core/trunk/exo.core.component.security.core/src/main/java/org/exoplatform/services/security/web/JAASConversationStateListener.java 2010-09-16
18:43:44 UTC (rev 3127)
+++
core/trunk/exo.core.component.security.core/src/main/java/org/exoplatform/services/security/web/JAASConversationStateListener.java 2010-09-17
07:05:17 UTC (rev 3128)
@@ -32,6 +32,13 @@
/**
* @author <a href="mailto:andrew00x@gmail.com">Andrey
Parfonov</a>
* @version $Id: $
+ * @deprecated Since use tomcat as default web-container do need use this
+ * listener any more. In tomcat 6.0.21 and later logout already
+ * implemented in
+ * <strong>org.apache.catalina.realm.GenericPrincipal</strong>.
+ * Detains described <a
+ *
href="https://issues.apache.org/bugzilla/show_bug.cgi?id=39231"
+ * >here</a> . Should use {@link ConversationStateListener}
instead.
*/
public class JAASConversationStateListener extends ConversationStateListener
{
@@ -67,10 +74,12 @@
}
else
{
- log.warn("Subject was not found in ConversationState
attributes.");
+ if (log.isDebugEnabled())
+ {
+ log.warn("Subject was not found in ConversationState
attributes.");
+ }
}
}
-
}
catch (Exception e)
{
Modified:
core/trunk/exo.core.component.security.core/src/main/java/org/exoplatform/services/security/web/SetCurrentIdentityFilter.java
===================================================================
---
core/trunk/exo.core.component.security.core/src/main/java/org/exoplatform/services/security/web/SetCurrentIdentityFilter.java 2010-09-16
18:43:44 UTC (rev 3127)
+++
core/trunk/exo.core.component.security.core/src/main/java/org/exoplatform/services/security/web/SetCurrentIdentityFilter.java 2010-09-17
07:05:17 UTC (rev 3128)
@@ -23,6 +23,7 @@
import org.exoplatform.container.web.AbstractFilter;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
+import org.exoplatform.services.security.Authenticator;
import org.exoplatform.services.security.ConversationRegistry;
import org.exoplatform.services.security.ConversationState;
import org.exoplatform.services.security.Identity;
@@ -33,6 +34,7 @@
import java.io.IOException;
import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
@@ -41,7 +43,7 @@
/**
* Created by The eXo Platform SAS .
- *
+ *
* @author <a href="mailto:gennady.azarenkov@exoplatform.com">Gennady
* Azarenkov</a>
* @version $Id: SimpleSessionFactoryInitializedFilter.java 7163 2006-07-19
@@ -50,12 +52,24 @@
public class SetCurrentIdentityFilter extends AbstractFilter
{
+ private boolean restoreIdentity;
+
/**
* Logger.
*/
private static Log log =
ExoLogger.getLogger("exo.core.component.security.core.SetCurrentIdentityFilter");
/**
+ * {@inheritDoc}
+ */
+ @Override
+ protected void afterInit(FilterConfig config) throws ServletException
+ {
+ super.afterInit(config);
+ restoreIdentity =
Boolean.parseBoolean(config.getInitParameter("restoreIdentity"));
+ }
+
+ /**
* Set current {@link ConversationState}, if it is not registered yet then
* create new one and register in {@link ConversationRegistry}. {@inheritDoc}
*/
@@ -70,12 +84,7 @@
{
ExoContainerContext.setCurrentContainer(container);
ConversationState state = getCurrentState(container, httpRequest);
- // NOTE may be set as null
ConversationState.setCurrent(state);
- if (state != null && log.isDebugEnabled())
- {
- log.debug(">>> Memberships " +
state.getIdentity().getMemberships());
- }
chain.doFilter(request, response);
}
finally
@@ -137,12 +146,40 @@
if (identity != null)
{
state = new ConversationState(identity);
- // keep subject as attribute in ConversationState
+ // Keep subject as attribute in ConversationState.
+ // TODO remove this, do not need it any more.
state.setAttribute(ConversationState.SUBJECT, identity.getSubject());
}
else
{
- log.error("Not found identity in IdentityRegistry for user " +
userId + ", check Login Module.");
+ if (restoreIdentity)
+ {
+ if (log.isDebugEnabled())
+ {
+ log.debug("Not found identity for " + userId + " try
to restore it. ");
+ }
+
+ Authenticator authenticator =
+
(Authenticator)container.getComponentInstanceOfType(Authenticator.class);
+ try
+ {
+ identity = authenticator.createIdentity(userId);
+ identityRegistry.register(identity);
+ }
+ catch (Exception e)
+ {
+ log.error("Unable restore identity. " + e.getMessage(),
e);
+ }
+
+ if (identity != null)
+ {
+ state = new ConversationState(identity);
+ }
+ }
+ else
+ {
+ log.error("Not found identity in IdentityRegistry for user "
+ userId + ", check Login Module.");
+ }
}
if (state != null)
@@ -152,7 +189,6 @@
{
log.debug("Register Conversation state " +
httpSession.getId());
}
-
}
}
}