在zk和spring security结合使用的时候,因为要使用zk的messagebox组件,所以就在zk.xml中把disable-event-thread这个属性设置为false了,但是最后发现SecurityContextHolder.getContext().getAuthentication() 得到的结果一直是null,折腾了半天,结果才找到解决方案:
在zk.xml中,加入 org.springframework.security.core.context.ThreadLocalSecurityContextHolderStrategy=contextHolder;
位置如下:
<preference>
<name>ThreadLocal</name>
<value>
org.springframework.transaction.support.TransactionSynchronizationManager=resources,
synchronizations,currentTransactionName,currentTransactionReadOnly,actualTransactionActive;
org.springframework.orm.hibernate3.SessionFactoryUtils=deferredCloseHolder;
org.springframework.transaction.interceptor.TransactionAspectSupport=transactionInfoHolder;
org.springframework.web.context.request.RequestContextHolder=requestAttributesHolder,inheritableRequestAttributesHolder;
org.springframework.security.core.context.ThreadLocalSecurityContextHolderStrategy=contextHolder;
</value>
</preference>