Re: [xwiki-devs] [xwiki-notifications] r24871 - platform/core/branches/xwiki-core-2.0/xwiki-core/src/main/java/com/xpn/xwiki/user/impl/xwiki
On 11/04/2009 01:12 PM, tmortagne (SVN) wrote:
Author: tmortagne Date: 2009-11-04 13:12:41 +0100 (Wed, 04 Nov 2009) New Revision: 24871
Modified: platform/core/branches/xwiki-core-2.0/xwiki-core/src/main/java/com/xpn/xwiki/user/impl/xwiki/XWikiAuthServiceImpl.java Log: XWIKI-4549: Impossible to connect with local user in a subwiki of a path based multiwiki mode farm
Modified: platform/core/branches/xwiki-core-2.0/xwiki-core/src/main/java/com/xpn/xwiki/user/impl/xwiki/XWikiAuthServiceImpl.java =================================================================== --- platform/core/branches/xwiki-core-2.0/xwiki-core/src/main/java/com/xpn/xwiki/user/impl/xwiki/XWikiAuthServiceImpl.java 2009-11-04 12:12:33 UTC (rev 24870) +++ platform/core/branches/xwiki-core-2.0/xwiki-core/src/main/java/com/xpn/xwiki/user/impl/xwiki/XWikiAuthServiceImpl.java 2009-11-04 12:12:41 UTC (rev 24871) @@ -23,7 +23,9 @@ import java.io.IOException; import java.net.URL; import java.security.Principal; +import java.util.HashMap; import java.util.List; +import java.util.Map;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -52,19 +54,30 @@ { private static final Log log = LogFactory.getLog(XWikiAuthServiceImpl.class);
- protected XWikiAuthenticator authenticator; + /** + * Each wiki has its own authenticator. + */ + protected Map<String, XWikiAuthenticator> authenticators = new HashMap<String, XWikiAuthenticator>();
Something should be synchronized here...
protected XWikiAuthenticator getAuthenticator(XWikiContext context) throws XWikiException { - if (this.authenticator != null) { - return this.authenticator; + String wikiName = context.getDatabase(); + + if (wikiName != null) { + wikiName = wikiName.toLowerCase(); }
+ XWikiAuthenticator authenticator = this.authenticators.get(wikiName); + + if (authenticator != null) { + return authenticator; + } + try { XWiki xwiki = context.getWiki();
if ("basic".equals(xwiki.Param("xwiki.authentication"))) { - this.authenticator = new MyBasicAuthenticator(); + authenticator = new MyBasicAuthenticator(); SecurityConfig sconfig = new SecurityConfig(false); sconfig.setAuthMethod("BASIC"); if (xwiki.Param("xwiki.authentication.realmname") != null) { @@ -72,9 +85,9 @@ } else { sconfig.setRealmName("XWiki"); } - this.authenticator.init(null, sconfig); + authenticator.init(null, sconfig); } else { - this.authenticator = new MyFormAuthenticator(); + authenticator = new MyFormAuthenticator(); SecurityConfig sconfig = new SecurityConfig(false);
sconfig.setAuthMethod("FORM"); @@ -164,13 +177,15 @@ fconfig.setInitParameter(FormAuthenticator.LOGIN_SUBMIT_PATTERN_KEY, xwiki.Param( "xwiki.authentication.loginsubmitpage", "/loginsubmit/XWiki/XWikiLogin"));
- this.authenticator.init(fconfig, sconfig); + authenticator.init(fconfig, sconfig); }
- return this.authenticator; + this.authenticators.put(wikiName, authenticator); + + return authenticator; } catch (Exception e) { throw new XWikiException(XWikiException.MODULE_XWIKI_USER, XWikiException.ERROR_XWIKI_USER_INIT, - "Cannot initialize authentication system", e); + "Cannot initialize authentication system for wiki [" + wikiName + "]", e); } }
-- Sergiu Dumitriu http://purl.org/net/sergiu/
On Sat, Nov 7, 2009 at 22:52, Sergiu Dumitriu <[email protected]> wrote:
On 11/04/2009 01:12 PM, tmortagne (SVN) wrote:
Author: tmortagne Date: 2009-11-04 13:12:41 +0100 (Wed, 04 Nov 2009) New Revision: 24871
Modified: platform/core/branches/xwiki-core-2.0/xwiki-core/src/main/java/com/xpn/xwiki/user/impl/xwiki/XWikiAuthServiceImpl.java Log: XWIKI-4549: Impossible to connect with local user in a subwiki of a path based multiwiki mode farm
Modified: platform/core/branches/xwiki-core-2.0/xwiki-core/src/main/java/com/xpn/xwiki/user/impl/xwiki/XWikiAuthServiceImpl.java =================================================================== --- platform/core/branches/xwiki-core-2.0/xwiki-core/src/main/java/com/xpn/xwiki/user/impl/xwiki/XWikiAuthServiceImpl.java 2009-11-04 12:12:33 UTC (rev 24870) +++ platform/core/branches/xwiki-core-2.0/xwiki-core/src/main/java/com/xpn/xwiki/user/impl/xwiki/XWikiAuthServiceImpl.java 2009-11-04 12:12:41 UTC (rev 24871) @@ -23,7 +23,9 @@ import java.io.IOException; import java.net.URL; import java.security.Principal; +import java.util.HashMap; import java.util.List; +import java.util.Map;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -52,19 +54,30 @@ { private static final Log log = LogFactory.getLog(XWikiAuthServiceImpl.class);
- protected XWikiAuthenticator authenticator; + /** + * Each wiki has its own authenticator. + */ + protected Map<String, XWikiAuthenticator> authenticators = new HashMap<String, XWikiAuthenticator>();
Something should be synchronized here...
Indeed, thanks for catching it.
protected XWikiAuthenticator getAuthenticator(XWikiContext context) throws XWikiException { - if (this.authenticator != null) { - return this.authenticator; + String wikiName = context.getDatabase(); + + if (wikiName != null) { + wikiName = wikiName.toLowerCase(); }
+ XWikiAuthenticator authenticator = this.authenticators.get(wikiName); + + if (authenticator != null) { + return authenticator; + } + try { XWiki xwiki = context.getWiki();
if ("basic".equals(xwiki.Param("xwiki.authentication"))) { - this.authenticator = new MyBasicAuthenticator(); + authenticator = new MyBasicAuthenticator(); SecurityConfig sconfig = new SecurityConfig(false); sconfig.setAuthMethod("BASIC"); if (xwiki.Param("xwiki.authentication.realmname") != null) { @@ -72,9 +85,9 @@ } else { sconfig.setRealmName("XWiki"); } - this.authenticator.init(null, sconfig); + authenticator.init(null, sconfig); } else { - this.authenticator = new MyFormAuthenticator(); + authenticator = new MyFormAuthenticator(); SecurityConfig sconfig = new SecurityConfig(false);
sconfig.setAuthMethod("FORM"); @@ -164,13 +177,15 @@ fconfig.setInitParameter(FormAuthenticator.LOGIN_SUBMIT_PATTERN_KEY, xwiki.Param( "xwiki.authentication.loginsubmitpage", "/loginsubmit/XWiki/XWikiLogin"));
- this.authenticator.init(fconfig, sconfig); + authenticator.init(fconfig, sconfig); }
- return this.authenticator; + this.authenticators.put(wikiName, authenticator); + + return authenticator; } catch (Exception e) { throw new XWikiException(XWikiException.MODULE_XWIKI_USER, XWikiException.ERROR_XWIKI_USER_INIT, - "Cannot initialize authentication system", e); + "Cannot initialize authentication system for wiki [" + wikiName + "]", e); } }
-- Sergiu Dumitriu http://purl.org/net/sergiu/ _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs
-- Thomas Mortagne
participants (2)
-
Sergiu Dumitriu -
Thomas Mortagne