0

我正在使用 OpenAM 对我的应用程序进行身份验证。我使用这样的 URL 访问我的应用程序:

http://my.company.com/appfolder/appservlet?lang=EN&user=test

首次访问时,OpenAM 代理会捕获 URL 并使用此重定向 URL 将我的浏览器重定向到身份验证页面:

...openam/UI/Login?goto=http%3A%2F%2Fmy.company.com%3A8080%2Fappfolder

正确身份验证后,我最终被重定向到以下 URL:

http://my.company.com/appfolder

这是逻辑,因为这是 goto 参数中引用的 URL。但它与原来的不一样:缺少 servlet 和自定义参数(语言和用户)。

知道如何配置我的代理以使其在重定向后保留 servlet 和参数吗?

4

2 回答 2

0

查看教程“使用 OpenAM 向网站添加身份验证”的这一步

在“创建访问策略”->“通配符匹配”部分是您的答案:

策略 URL 中的通配符 * 与“?”不匹配。因此,如果您希望允许提交 GET 参数,则需要针对 http://webserver.example.com/ *?* 的第二个策略。

于 2012-08-21T05:04:40.117 回答
0

感谢您的回答。正如我之前的评论中提到的,添加新政策并不能解决我的问题。实际上,我不确定策略如何解决问题,因为goto参数是由 J2EE 代理生成的,它在应用策略之前起作用(据我所知......我可能错了)。

无论如何,我可以通过重新编译 J2EE 代理来解决我的问题:我已经构建了一个agent.jar基于 v3.0.3 的新代理,可在 forgerock 获得。然后我用AmFilterRequestContext.class一个新的替换了,建立在这里可用的源代码:http: //www.docjar.com/html/api/com/sun/identity/agents/filter/AmFilterRequestContext.java.html

有了这个新代理,我goto的现在是正确的,并且重定向效果很好(而且我不必定义任何策略)。

奇怪的是,我不明白为什么它现在起作用了!我找不到上面提到的 java 源代码和原始类的未编译版本之间的任何区别!我只是添加了一些System.out.println来获取变量值和函数结果,并构建了 jar。重新启动我的jboss后,这goto是正确的。当我有时间时,我会尝试理解为什么这最终会起作用。

于 2012-08-22T09:30:32.437 回答