mirror of
				https://github.com/Alfresco/alfresco-community-repo.git
				synced 2025-10-29 15:21:53 +00:00 
			
		
		
		
	git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@18931 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
		
			
				
	
	
		
			147 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			147 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
/*
 | 
						|
 * Copyright (C) 2005-2010 Alfresco Software Limited.
 | 
						|
 *
 | 
						|
 * This file is part of Alfresco
 | 
						|
 *
 | 
						|
 * Alfresco is free software: you can redistribute it and/or modify
 | 
						|
 * it under the terms of the GNU Lesser General Public License as published by
 | 
						|
 * the Free Software Foundation, either version 3 of the License, or
 | 
						|
 * (at your option) any later version.
 | 
						|
 *
 | 
						|
 * Alfresco is distributed in the hope that it will be useful,
 | 
						|
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
						|
 * GNU Lesser General Public License for more details.
 | 
						|
 *
 | 
						|
 * You should have received a copy of the GNU Lesser General Public License
 | 
						|
 * along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
 | 
						|
 */
 | 
						|
package org.alfresco.repo.remote;
 | 
						|
 | 
						|
import org.alfresco.repo.security.authentication.AuthenticationException;
 | 
						|
import org.alfresco.service.cmr.security.AuthenticationService;
 | 
						|
import org.aopalliance.intercept.MethodInterceptor;
 | 
						|
import org.aopalliance.intercept.MethodInvocation;
 | 
						|
import org.springframework.aop.framework.ReflectiveMethodInvocation;
 | 
						|
 | 
						|
/**
 | 
						|
 * This is an interceptor that continuosly tries to reauthenticate when
 | 
						|
 * a method call results in an AuthenticationException.
 | 
						|
 * @author britt
 | 
						|
 */
 | 
						|
public class ReauthenticatingAdvice implements MethodInterceptor   
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * The authentication service reference.
 | 
						|
     */
 | 
						|
    private AuthenticationService fAuthService;
 | 
						|
    
 | 
						|
    /**
 | 
						|
     * The ticket holder.
 | 
						|
     */
 | 
						|
    private ClientTicketHolder fTicketHolder;
 | 
						|
    
 | 
						|
    /**
 | 
						|
     * The user name.
 | 
						|
     */
 | 
						|
    private String fUser;
 | 
						|
    
 | 
						|
    /**
 | 
						|
     * The user's password.
 | 
						|
     */
 | 
						|
    private String fPassword;
 | 
						|
    
 | 
						|
    /**
 | 
						|
     * The time in milliseconds to wait between attempts to reauthenticate.
 | 
						|
     */
 | 
						|
    private long fRetryInterval;
 | 
						|
    
 | 
						|
    /**
 | 
						|
     * Default constructor.
 | 
						|
     */
 | 
						|
    public ReauthenticatingAdvice()
 | 
						|
    {
 | 
						|
        super();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Setter.
 | 
						|
     */
 | 
						|
    public void setAuthenticationService(AuthenticationService service)
 | 
						|
    {
 | 
						|
        fAuthService = service;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Setter.
 | 
						|
     */
 | 
						|
    public void setClientTicketHolder(ClientTicketHolder ticketHolder)
 | 
						|
    {
 | 
						|
        fTicketHolder = ticketHolder;
 | 
						|
    }
 | 
						|
    
 | 
						|
    /**
 | 
						|
     * Setter.
 | 
						|
     */
 | 
						|
    public void setUser(String user)
 | 
						|
    {
 | 
						|
        fUser = user;
 | 
						|
    }
 | 
						|
    
 | 
						|
    /**
 | 
						|
     * Setter.
 | 
						|
     */
 | 
						|
    public void setPassword(String password)
 | 
						|
    {
 | 
						|
        fPassword = password;
 | 
						|
    }
 | 
						|
    
 | 
						|
    /**
 | 
						|
     * Setter.
 | 
						|
     */
 | 
						|
    public void setRetryInterval(long retryInterval)
 | 
						|
    {
 | 
						|
        fRetryInterval = retryInterval;
 | 
						|
    }
 | 
						|
    
 | 
						|
    /* (non-Javadoc)
 | 
						|
     * @see org.aopalliance.intercept.MethodInterceptor#invoke(org.aopalliance.intercept.MethodInvocation)
 | 
						|
     */
 | 
						|
    public Object invoke(MethodInvocation mi) throws Throwable 
 | 
						|
    {
 | 
						|
        while (true)
 | 
						|
        {
 | 
						|
            try
 | 
						|
            {
 | 
						|
                MethodInvocation clone = ((ReflectiveMethodInvocation)mi).invocableClone();
 | 
						|
                return clone.proceed();
 | 
						|
            }
 | 
						|
            catch (AuthenticationException ae)
 | 
						|
            {
 | 
						|
                // Sleep for an interval and try again.
 | 
						|
                try
 | 
						|
                {
 | 
						|
                    Thread.sleep(fRetryInterval);
 | 
						|
                }
 | 
						|
                catch (InterruptedException ie)
 | 
						|
                {
 | 
						|
                    // Do nothing.
 | 
						|
                }
 | 
						|
                try
 | 
						|
                {
 | 
						|
                    // Reauthenticate.
 | 
						|
                    fAuthService.authenticate(fUser, fPassword.toCharArray());
 | 
						|
                    String ticket = fAuthService.getCurrentTicket();
 | 
						|
                    fTicketHolder.setTicket(ticket);
 | 
						|
                    // Modify the ticket argument.
 | 
						|
                    mi.getArguments()[0] = ticket;
 | 
						|
                }
 | 
						|
                catch (Exception e)
 | 
						|
                {
 | 
						|
                    // Do nothing.
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |