我有一个grails(v1.2.1)应用程序,使用acegi插件(v0.5.2)根据Active Directory域对用户进行身份验证。
只要我使用“grails run-app”运行应用程序,一切都很完美;正确的控制器/操作受到保护,用户可以成功登录,无需登录每个页面请求等。
当我在Weblogic 10.3中运行应用程序作为战争时,整个事情就崩溃了。正确的控制器/操作需要身份验证,但在成功登录后,用户始终会被发送到defaultTargetUrl而不是最初请求的URL。成功登录后,如果我尝试返回刚刚导致我登录的同一受保护页面,则会要求再次登录(这是无用的,因为成功登录仍会将我发送到defaultTargetUrl)。如果我故意在登录页面上输入错误的用户/通行证,我会按照设计发回登录页面,但不会出现验证消息。
我添加了一些日志记录/完成了一些调试并确定了以下内容:
答案 0 :(得分:1)
解决。
如果您发现过这样的行为,请检查您的Cookie。我的浏览器为localhost提供了几个“JSESSIONID”cookie。其中2个JSESSIONID的路径与我的应用程序的路径匹配(一个用于路径“/”,一个用于我的应用程序的路径。
浏览器在HTTP标头中发送了两个匹配的JSESSIONID。标头中的第一个JSESSIONID不是刚刚设置的那个,所以我的应用程序不认为请求是同一会话的一部分。因此,丢失了所有会话属性。特别是登录相关的。