when I add a securityinterceptor and transactioninterceptor into the clinic demo: some error find:

//// standalone security-context.xml add:

<bean id="clinicSecurity" class="net.sf.acegisecurity.intercept.method.aopal liance.MethodSecurityInterceptor">
<property name="authenticationManager"><ref bean="authenticationManager"/></property>
<property name="accessDecisionManager"><ref local="accessDecisionManager"/></property>
<!-- <property name="afterInvocationManager"><ref local="afterInvocationManager"/></property>
--> <property name="objectDefinitionSource">
<value>
org.springframework.samples.petclinic.Clinic.f*=RO LE_CLINIC_CUSTOMER
</value>
</property>
</bean>
////
/// bussines-context.xml add

<bean id="transactionInterceptor" class="org.springframework.transaction.interceptor .TransactionInterceptor">
<property name="transactionManager"><ref bean="transactionManager"/></property>
<property name="transactionAttributeSource">
<value>
org.springframework.samples.petclinic.Clinic.g*=PR OPAGATION_REQUIRED
</value>
</property>
</bean>

<bean id="clinic" class="org.springframework.aop.framework.ProxyFact oryBean">
<property name="proxyInterfaces"><value>org.springframework. samples.petclinic.Clinic</value></property>
<property name="interceptorNames">
<list>
<idref local="transactionInterceptor"/>
<idref bean="clinicSecurity"/>
<idref local="hsqlClinic"/>
</list>
</property>
</bean>

///

int springrcp ,there is a petclinic demo for rpc standlone and c/s demo.

but I find some error: when I have login in successful. the error:


ERROR org.springframework.richclient.application.Applica tionLauncher - Exception occured initializing Application bean
net.sf.acegisecurity.AuthenticationCredentialsNotF oundException: A valid SecureContext was not provided in the RequestContext
at net.sf.acegisecurity.intercept.AbstractSecurityInt erceptor.credentialsNotFound(AbstractSecurityInter ceptor.java:504)
at net.sf.acegisecurity.intercept.AbstractSecurityInt erceptor.beforeInvocation(AbstractSecurityIntercep tor.java:380)
at net.sf.acegisecurity.intercept.method.aopalliance. MethodSecurityInterceptor.invoke(MethodSecurityInt erceptor.java:77)
at org.springframework.aop.framework.ReflectiveMethod Invocation.proceed(ReflectiveMethodInvocation.java :143)
at org.springframework.transaction.interceptor.Transa ctionInterceptor.invoke(TransactionInterceptor.jav a:56)
at org.springframework.aop.framework.ReflectiveMethod Invocation.proceed(ReflectiveMethodInvocation.java :143)
at org.springframework.aop.framework.JdkDynamicAopPro xy.invoke(JdkDynamicAopProxy.java:174)
at $Proxy0.findOwners(Unknown Source)
at org.springframework.richclient.samples.petclinic.u i.OwnerManagerView.createOwnerManagerTree(OwnerMan agerView.java:104)
at org.springframework.richclient.samples.petclinic.u i.OwnerManagerView.createControl(OwnerManagerView. java:96)
at org.springframework.richclient.factory.AbstractCon trolFactory.getControl(AbstractControlFactory.java :4
at org.springframework.richclient.application.APagePa ne.createControl(APagePane.java:44)
at org.springframework.richclient.factory.AbstractCon trolFactory.getControl(AbstractControlFactory.java :4
at org.springframework.richclient.application.support .AppPage.addView(AppPage.java:189)
at org.springframework.richclient.application.support .SingleViewPageDescriptor.buildInitialLayout(Singl eViewPageDescriptor.java:60)
at org.springframework.richclient.application.support .AppPage.getControl(AppPage.java:77)
at org.springframework.richclient.application.support .DefaultApplicationWindow.applyCustomLayout(Defaul tApplicationWindow.java:237)
at org.springframework.richclient.application.support .DefaultApplicationWindow.initWindowControl(Defaul tApplicationWindow.java:223)
at org.springframework.richclient.application.support .DefaultApplicationWindow.initWindow(DefaultApplic ationWindow.java:213)
at org.springframework.richclient.application.support .DefaultApplicationWindow.showPage(DefaultApplicat ionWindow.java:155)
at org.springframework.richclient.application.Applica tion.openWindow(Application.java:166)
at org.springframework.richclient.application.Applica tionLauncher.launchMyRichClient(ApplicationLaunche r.java:178)
at org.springframework.richclient.application.Applica tionLauncher.<init>(ApplicationLauncher.java:100)
at org.springframework.richclient.samples.petclinic.P etClinicStandalone.main(PetClinicStandalone.java:4 1)


,I have step into, i find login form set context successful:
In SessionDetails.java:
//////////
public void login() throws AuthenticationException {
// Attempt login
UsernamePasswordAuthenticationToken request = new UsernamePasswordAuthenticationToken(getUsername(),
getPassword());

Authentication result = authenticationManager.authenticate(request);

// Setup a secure ContextHolder (if required)
if (ContextHolder.getContext() == null || !(ContextHolder.getContext() instanceof SecureContext)) {
try {
ContextHolder.setContext((SecureContext)getSecureC ontextClass().newInstance());
}
catch (Exception e) {
throw new RuntimeException(e);
}
}

// Commit the successful Authentication object to the secure
// ContextHolder
SecureContext sc = (SecureContext)ContextHolder.getContext();
sc.setAuthentication(result);
ContextHolder.setContext(sc);

// Fire application event to advise of new login
ApplicationContext appCtx = Application.services().getApplicationContext();
appCtx.publishEvent(new LoginEvent(result));
}

/////////


but in methodinvokationinterceptor.java:
if ((ContextHolder.getContext() == null)
|| !(ContextHolder.getContext() instanceof SecureContext)) {
credentialsNotFound("A valid SecureContext was not provided in the RequestContext",
object, attr);
}

get the" ContextHolder.getContext() =" null

they are all static member in ContextHolder. why in the interceptor call it get a null return?