Grails Spring Security:匿名页面不显示身份验证信息



我在Grails中使用Spring Security插件。 我有一个控制器,它对某些安全操作使用注释,但不对非安全内容使用注释。 果然,sec:isLoggedIn和其他sec:loggedInUserInfo标记适用于安全操作,但即使用户登录了非安全视图,它们也始终显示为未登录。 这是我的控制器的样子:

class ContentController {
    def anonymousContent() {
        getContent(params, 'pages')
    }
    @Secured(['ROLE_USER', 'ROLE_ADMIN'])
    def secureContent() {
        getContent(params, 'secure')
    }
    private getContent(params, path) {
        def viewPath = "${path}/${params.view}"
        render(view: viewPath, model: params)
    }
}

我应该提到我正在使用一些自定义身份验证作为 SSO 解决方案的一部分,这基本上让我覆盖了几个类,如 AuthenticationProviderAbstractAuthenticationTokenLoginUrlAuthenticationEntryPointAbstractAuthenticationProcessingFilter ,但我认为它不应该导致这个问题。

任何想法将不胜感激。 谢谢

对于遇到此问题的其他任何人,我设法发现该问题与mod_proxy有关。 我使用它来隐藏我的上下文路径,这反过来又导致 servlet 在读取我的应用程序的会话 cookie 时遇到问题。 对于未经身份验证的页面,这意味着它每次都会创建一个全新的会话。 对于经过身份验证的页面,它也会创建一个新会话,但由于我们的 SSO 身份验证机制,它实际上会重新验证每个请求。 可能很好,我们抓住了它,因为这是一项昂贵的操作。 答案实际上是在我们的tomcat配置中将cookie路径(setCookiePath)设置为root('/')。 希望能帮助别人:)

最新更新