ZK应用程序Spring安全性不会在事件侦听器中返回用户

时间:2013-02-24 19:32:02

标签: 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 Exception {        
        **point2**
        //do something with current user    
    }
});

point1 中,我尝试使用Authentication authentication = SecurityContextHolder.getContext().getAuthentication();获得当前用户。这是完美的工作,我收到了登录用户。但是在 point2 SecurityContextHolder.getContext().getAuthentication()中返回null。如何在点击事件中获取当前用户?

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

的SecurityFilters

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

1 个答案:

答案 0 :(得分:2)

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

  

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

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

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