mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-06-02 17:35:18 +00:00
Removed an unnecessary import. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@4628 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
119 lines
2.8 KiB
Java
119 lines
2.8 KiB
Java
/**
|
|
*
|
|
*/
|
|
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 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 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();
|
|
ClientTicketHolder.SetTicket(ticket);
|
|
// Modify the ticket argument.
|
|
mi.getArguments()[0] = ticket;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
// Do nothing.
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|