diff --git a/config/alfresco/messages/office-addin_it.properties b/config/alfresco/messages/office-addin_it.properties
index 9b29687186..ef5c1828dc 100755
--- a/config/alfresco/messages/office-addin_it.properties
+++ b/config/alfresco/messages/office-addin_it.properties
@@ -87,7 +87,7 @@ office.message.results_max.after=elementi
office.message.no_results=Nessun risultato trovato
office.message.confirm_delete=Eliminare questo documento?
office.message.enter_workflow_details=Immettere i dettagli del nuovo workflow di seguito
-office.message.workflow_action_complete=L''azione del workflow''{0}'' \u00e8 stata completata.
+office.message.workflow_action_complete=L''azione del workflow ''{0}'' \u00e8 stata completata.
#Properties
office.property.title=Titolo
diff --git a/config/alfresco/messages/webclient_fr.properties b/config/alfresco/messages/webclient_fr.properties
index 0bc022100b..af652af1b6 100755
--- a/config/alfresco/messages/webclient_fr.properties
+++ b/config/alfresco/messages/webclient_fr.properties
@@ -2127,5 +2127,24 @@ trx.fromRepositoryId=Transf\u00e9r\u00e9 de
trx.repositoryId=Origine du transfert
trx.invadedBy=Inclut des transferts
+#output-path-pattern-help.jsp
+guidelines_title=Consignes
+variables_title=Variables
+forexample_title=Par exemple
+general_info_part1=Un chemin de destination est une expression
+general_info_part2=FreeMarker
+general_info_part3=utilis\u00e9e pour indiquer le chemin \u00e0 utiliser lors de l'enregistrement d'une ressource g\u00e9n\u00e9r\u00e9e \u00e0 l'aide d'une substitution variable lors de la cr\u00e9ation de contenu Web.
+guidelines_message=Les chemins de destination commen\u00e7ant par une barre oblique (par exemple, /${webapp}/content/${name}.xml) produisent des chemins enracin\u00e9s dans le bac \u00e0 sable. Ceux qui ne commencent pas par une barre oblique produisent des chemins relatifs au r\u00e9pertoire en cours d''utilisation lors de l''ex\u00e9cution de l''assistant de cr\u00e9ation de contenu Web.
+description_name_field=Le nom des donn\u00e9es d'instance de formulaire, tel qu'il a \u00e9t\u00e9 saisi par l'utilisateur dans l'assistant de cr\u00e9ation de contenu Web.
+description_webapp_field=Le nom de l''application Web dans laquelle les donn\u00e9es d''instance de formulaire sont cr\u00e9\u00e9es. G\u00e9n\u00e9ralement, si vous indiquez un chemin de destination absolu, le chemin commencera par le dossier de l''application Web (c-\u00e0-d. /${webapp}/...)
+description_cwd_field=Le chemin relatif de l'application Web dans laquelle le formulaire est cr\u00e9\u00e9.
+description_extension_field=L'extension par d\u00e9faut associ\u00e9e au type MIME configur\u00e9 pour le mod\u00e8le de moteur de rendu. Cette variable est disponible uniquement pour les chemins de destination de rendu.
+description_xml_field=Les donn\u00e9es d'instance xml collect\u00e9es par le formulaire.
+description_node_field=Le noeud de donn\u00e9es de l'instance de formulaire. Cette variable est disponible uniquement pour les chemins de destination de rendu.
+description_date_field_part1=La date \u00e0 laquelle les donn\u00e9es d'instance de formulaire sont enregistr\u00e9es. Reportez-vous \u00e0 la
+description_date_field_part2=r\u00e9f\u00e9rence de date FreeMarker
+description_date_field_part3=pour plus d'informations.
+wiki_reference_part1=Pour des r\u00e9f\u00e9rences plus compl\u00e8tes, reportez-vous au
+wiki_reference_part2=wiki.
#Team properties
team_login_warning=La page Alfresco Explorer requise n'est pas prise en charge. Acc\u00e9dez \u00e0 cette page uniquement lorsque le service de support Alfresco vous y invite.
diff --git a/config/alfresco/messages/webclient_it.properties b/config/alfresco/messages/webclient_it.properties
index 1a56097a97..c45170fed8 100755
--- a/config/alfresco/messages/webclient_it.properties
+++ b/config/alfresco/messages/webclient_it.properties
@@ -2127,5 +2127,24 @@ trx.fromRepositoryId=Trasferito da
trx.repositoryId=Origine trasferita
trx.invadedBy=Contiene trasferimenti
+#output-path-pattern-help.jsp
+guidelines_title=Linee guida
+variables_title=Variabili
+forexample_title=Ad esempio
+general_info_part1=Uno schema percorso di output \u00e8 un'espressione
+general_info_part2=FreeMarker
+general_info_part3=utilizzata per specificare il percorso da utilizzare per salvare una risorsa generata attraverso la sostituzione di variabili quando si crea un contenuto Web.
+guidelines_message=Gli schemi percorso di output che iniziano con una barra (ad esempio /${webapp}/content/${name}.xml) produrranno dei percorsi con radice nella sandbox. Quelli che non iniziano con una barra produrranno percorsi relativi alla directory di lavoro attuale, quando viene richiamato l''assistente Crea contenuto web.
+description_name_field=Il nome dei dati dell\u2019istanza del modulo inseriti dall'utente nell'assistente Crea contenuto web.
+description_webapp_field=Il nome della webapp in cui vengono creati i dati dell''istanza del modulo. In genere, se si specifica uno schema percorso di output assoluto, il percorso inizier\u00e0 con la cartella webapp (ossia /${webapp}/...)
+description_cwd_field=Il percorso relativo della webapp in cui viene creato il modulo.
+description_extension_field=L'estensione predefinita associata al tipo mime configurato per il modello motore di rendering. Questa variabile \u00e8 disponibile solo per la trasformazione di schemi percorso di output.
+description_xml_field=I dati dell'istanza xml raccolti dal modulo.
+description_node_field=Il nodo dei dati dell'istanza del modulo. Questa variabile \u00e8 disponibile solo per la trasformazione di schemi percorso di output.
+description_date_field_part1=La data attuale in cui vengono salvati i dati dell'istanza del modulo. Fare riferimento alla
+description_date_field_part2=data FreeMarker
+description_date_field_part3=per ulteriori informazioni.
+wiki_reference_part1=Per informazioni pi\u00f9 dettagliate, consultare il
+wiki_reference_part2=wiki.
#Team properties
team_login_warning=La pagina Alfresco Explorer non \u00e8 supportata. Accedere a questa pagina solo seguendo le istruzioni del Supporto Alfresco.
diff --git a/config/alfresco/subsystems/Authentication/external/external-filter-context.xml b/config/alfresco/subsystems/Authentication/external/external-filter-context.xml
index 40e39cfef2..c367d355fc 100644
--- a/config/alfresco/subsystems/Authentication/external/external-filter-context.xml
+++ b/config/alfresco/subsystems/Authentication/external/external-filter-context.xml
@@ -21,4 +21,29 @@
+
+ null
otherwise.
+ */
+ public static String getRemoteUser(final ServletContext sc, final HttpServletRequest httpRequest)
+ {
+ String userId = null;
+
+ // If the remote user mapper is configured, we may be able to map in an externally authenticated user
+ final WebApplicationContext wc = WebApplicationContextUtils.getRequiredWebApplicationContext(sc);
+ RemoteUserMapper remoteUserMapper = (RemoteUserMapper) wc.getBean(REMOTE_USER_MAPPER);
+ if (!(remoteUserMapper instanceof ActivateableBean) || ((ActivateableBean) remoteUserMapper).isActive())
+ {
+ userId = remoteUserMapper.getRemoteUser(httpRequest);
+ }
+ return userId;
+ }
+
/**
* Attempts to retrieve the User object stored in the current session.
*
@@ -450,16 +473,10 @@ public final class AuthenticationHelper
*/
public static User getUser(final ServletContext sc, final HttpServletRequest httpRequest, HttpServletResponse httpResponse)
{
- String userId = null;
-
// If the remote user mapper is configured, we may be able to map in an externally authenticated user
- final WebApplicationContext wc = WebApplicationContextUtils.getRequiredWebApplicationContext(sc);
- RemoteUserMapper remoteUserMapper = (RemoteUserMapper) wc.getBean(REMOTE_USER_MAPPER);
- if (!(remoteUserMapper instanceof ActivateableBean) || ((ActivateableBean) remoteUserMapper).isActive())
- {
- userId = remoteUserMapper.getRemoteUser(httpRequest);
- }
+ String userId = getRemoteUser(sc, httpRequest);
+ final WebApplicationContext wc = WebApplicationContextUtils.getRequiredWebApplicationContext(sc);
HttpSession session = httpRequest.getSession();
User user = null;
@@ -513,9 +530,21 @@ public final class AuthenticationHelper
// If we have been authenticated by other means, just propagate through the user identity
AuthenticationComponent authenticationComponent = (AuthenticationComponent) wc
.getBean(AUTHENTICATION_COMPONENT);
- authenticationComponent.setCurrentUser(userId);
- AuthenticationService authenticationService = (AuthenticationService) wc.getBean(AUTHENTICATION_SERVICE);
- user = setUser(sc, httpRequest, userId, authenticationService.getCurrentTicket(), true);
+ try
+ {
+ authenticationComponent.setCurrentUser(userId);
+ AuthenticationService authenticationService = (AuthenticationService) wc.getBean(AUTHENTICATION_SERVICE);
+ user = setUser(sc, httpRequest, userId, authenticationService.getCurrentTicket(), true);
+ }
+ catch (AuthenticationException authErr)
+ {
+ // Allow for an invalid external user ID to be indicated
+ session.removeAttribute(AUTHENTICATION_USER);
+ if (!Application.inPortalServer())
+ {
+ session.invalidate();
+ }
+ }
}
}
return user;
diff --git a/source/java/org/alfresco/web/app/servlet/BaseServlet.java b/source/java/org/alfresco/web/app/servlet/BaseServlet.java
index 2d81d812ae..abe930bf0e 100644
--- a/source/java/org/alfresco/web/app/servlet/BaseServlet.java
+++ b/source/java/org/alfresco/web/app/servlet/BaseServlet.java
@@ -19,6 +19,7 @@
package org.alfresco.web.app.servlet;
import java.io.IOException;
+import java.io.PrintWriter;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashSet;
@@ -264,7 +265,26 @@ public abstract class BaseServlet extends HttpServlet
}
redirectURL.append(URLEncoder.encode(url, "UTF-8"));
}
- res.sendRedirect(redirectURL.toString());
+
+ // If external authentication isn't in use (e.g. proxied share authentication), it's safe to return a redirect to the client
+ if (AuthenticationHelper.getRemoteUser(sc, req) == null)
+ {
+ res.sendRedirect(redirectURL.toString());
+ }
+ // Otherwise, we must signal to the client with an unauthorized status code and rely on a browser refresh to do
+ // the redirect for failover login (as we do with NTLM, Kerberos)
+ else
+ {
+ res.setContentType("text/html; charset=UTF-8");
+ res.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
+
+ final PrintWriter out = res.getWriter();
+ out.println("
Please log in.
"); + out.println(""); + out.close(); + } } /** diff --git a/source/java/org/alfresco/web/app/servlet/WebScriptSSOAuthenticationFilter.java b/source/java/org/alfresco/web/app/servlet/WebScriptSSOAuthenticationFilter.java index 27a3a664ae..086c151764 100644 --- a/source/java/org/alfresco/web/app/servlet/WebScriptSSOAuthenticationFilter.java +++ b/source/java/org/alfresco/web/app/servlet/WebScriptSSOAuthenticationFilter.java @@ -60,6 +60,11 @@ public class WebScriptSSOAuthenticationFilter extends BaseAuthenticationFilter i private boolean isActive = true; + public WebScriptSSOAuthenticationFilter() + { + setUserAttributeName(AuthenticationHelper.AUTHENTICATION_USER); + } + /** * @param container the container to set */ @@ -95,8 +100,6 @@ public class WebScriptSSOAuthenticationFilter extends BaseAuthenticationFilter i public void doFilter(ServletContext context, ServletRequest sreq, ServletResponse sresp, FilterChain chain) throws IOException, ServletException { - setUserAttributeName(AuthenticationHelper.AUTHENTICATION_USER); - // Get the HTTP request/response HttpServletRequest req = (HttpServletRequest)sreq; HttpServletResponse res = (HttpServletResponse)sresp; diff --git a/source/java/org/alfresco/web/bean/users/CreateUserWizard.java b/source/java/org/alfresco/web/bean/users/CreateUserWizard.java index e2b3ad476f..edfe58cca5 100644 --- a/source/java/org/alfresco/web/bean/users/CreateUserWizard.java +++ b/source/java/org/alfresco/web/bean/users/CreateUserWizard.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2010 Alfresco Software Limited. + * Copyright (C) 2005-2011 Alfresco Software Limited. * * This file is part of Alfresco * @@ -799,39 +799,7 @@ public class CreateUserWizard extends BaseWizardBean { // create properties for Person type from submitted Form data Map