2012-08-13 126 views
0

我正在使用OpenAM在我的應用程序上進行身份驗證。我用這樣的URL訪問我的應用程序: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 param中引用的URL。但它與原來的不一樣:缺少servlet和自定義參數(lang和user)。

任何想法如何配置我的代理,使它保持重定向後的servlet和params?

回答

0

查看教程「使用OpenAM向網站添加身份驗證」的this step

在節「創建訪問策略」 - >「通配符匹配」是你的答案:

政策網址通配符*不匹配「?」。因此,如果您要 希望允許GET參數提交,則需要第二個策略 http://webserver.example.com/ *?*。

+0

感謝您的回覆。不幸的是,它並沒有解決問題:我試圖用 'http:// my.company.com/*', 'http://my.company.com/*?*', 'http: // my.company.com/appfolder/*'和 'http://my.company.com/appfolder/*?*', ,但代理始終會建立一個沒有servlet或參數的goto參數。 奇怪的是,認證後,如果我輸入我的應用程序的完整URL,然後使用'... openam/UI/Logout'註銷,下一個openam重定向包括servlet和參數。 – morbac 2012-08-22 05:50:27

0

感謝您的回答。正如我以前的評論中提到的那樣,添加新政策並不能解決我的問題。實際上,由於J2EE代理程序生成goto參數,因此我不確定要了解這些策略如何解決問題,因爲在應用策略(據我所知......我可能錯了)之前,該參數會起作用。

無論如何,我可以通過重新編譯J2EE代理來解決我的問題:我已經基於forgerock上的v3.0.3構建了一個新的agent.jar。然後,我通過更換一個新的AmFilterRequestContext.class,建立在可在這裏來源: http://www.docjar.com/html/api/com/sun/identity/agents/filter/AmFilterRequestContext.java.html

有了這個新的經紀人,我現在goto是正確的,並重定向效果很好(我沒有定義任何政策)。

奇怪的是,我不明白它爲什麼現在起作用!我沒有發現上面提到的java源和原始類的未編譯版本之間的任何區別!我只是添加了一些System.out.println來獲取變量值和函數結果,並構建了jar。在恢復我的jboss之後,goto是正確的。我會試着去理解爲什麼當我有時間的時候,這終於奏效了。