Spring security ZK应用程序。Spring security没有';t返回事件侦听器内部的用户

Spring security ZK应用程序。Spring security没有';t返回事件侦听器内部的用户,spring-security,zk,Spring Security,Zk,我有ZK和Spring Security的应用程序。我通过spring安全机制登录应用程序。在索引页上,我有一些动态创建的组件。“A”组件已单击侦听器 ***point1** userComponent = new A("link"); userComponent.addEventListener(Events.ON_CLICK, new EventListener<Event>() { public void onEvent(Event event) throws

我有ZK和Spring Security的应用程序。我通过spring安全机制登录应用程序。在索引页上,我有一些动态创建的组件。“A”组件已单击侦听器

***point1**
userComponent = new A("link");
userComponent.addEventListener(Events.ON_CLICK, new EventListener<Event>() {    
    public void onEvent(Event event) throws Exception {        
        **point2**
        //do something with current user    
    }
});
***第1点**
userComponent=新的链接;
userComponent.addEventListener(Events.ON_单击,新建EventListener(){
public void onEvent(事件)引发异常{
**第2点**
//对当前用户执行某些操作
}
});
在点1中,我尝试使用
Authentication Authentication=SecurityContextHolder.getContext().getAuthentication()获取当前用户它的工作完美,我收到登录用户。但是在第2点中,SecurityContextHolder.getContext().getAuthentication()返回null。如何在点击事件中获取当前用户

也许堆栈跟踪可以有所帮助。我在stacktrace中没有看到指向点2的SecurityFilters

这是指向点1的堆栈跟踪

堆栈跟踪到point2

看起来您已经为与事件处理程序匹配的URL定义了一个空的筛选器链(我可以从第二个堆栈跟踪中包含的事实看出这一点)。因此您是正确的-请求绕过了Spring Security,因此不会获取当前用户信息。这在调试日志中应该很明显,因为您将看到一条消息,内容如下:

具有空筛选器列表或没有匹配的筛选器

在没有看到您的配置的情况下,很难准确地说出它是什么(我对zk一无所知),但是您应该能够轻松地调试来自浏览器的请求,并将它们与调试日志输出相匹配,调试日志输出详细解释了如何处理这些请求

如果您发布Ajax调用使用的配置和URL,那么给出准确答案应该会更容易。

是的,您是对的。我使用了/zkau-is servlet来代替ZK事件