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/
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs