mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-06-09 17:45:10 +00:00
Virtualization server now automatically reauthenticates with the Alfresco Server, if
the Alfresco Server goes down and comes back up or if there is a network interruption. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@4623 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
parent
4b028c66ee
commit
aaa4c27bbd
119
source/java/org/alfresco/repo/remote/ReauthenticatingAdvice.java
Normal file
119
source/java/org/alfresco/repo/remote/ReauthenticatingAdvice.java
Normal file
@ -0,0 +1,119 @@
|
||||
/**
|
||||
*
|
||||
*/
|
||||
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;
|
||||
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
|
||||
|
||||
/**
|
||||
* 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.
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user