0

我有 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 点中,我尝试让当前用户使用Authentication authentication = SecurityContextHolder.getContext().getAuthentication();它的工作完美,并且我收到登录用户。但是在point2 SecurityContextHolder.getContext().getAuthentication()中返回null。如何在点击事件中获取当前用户?

也许堆栈跟踪可以提供帮助。我在堆栈跟踪中看到没有 SecurityFilters 到point2

这是到点 1的堆栈跟踪 http://pastebin.com/raw.php?i=k4EhXrAi 到点
2 的 堆栈跟踪http://pastebin.com/raw.php?i=v1mbfbwi

4

1 回答 1

2

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

有一个空的过滤器列表没有匹配的过滤器

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

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

于 2013-02-24T21:15:14.647 回答