2016-01-09 36 views
4

在Tomcat 7上,我設置了一個Realm讓容器管理認證過程。我還設置了web.xml與相應<security-constraint>如何在Tomcat 7中以編程方式檢索loginConfig?

<login-config> 
    <auth-method>FORM</auth-method> 
    <realm-name>MyRealm</realm-name> 
    <form-login-config> 
    <form-login-page>/public/login.jsp</form-login-page> 
    <form-error-page>/public/loginError.html</form-error-page> 
    </form-login-config> 
</login-config> 

Depeding由用戶login.jsp中(直接或通過OAuth)選用的登錄協議,流可能被重新路由到一個servlet,我必須在調用HttpServletRequest.login()之前管理一些東西,如果它繼續。

如果不是這樣,我想重新路由流量返回到登錄頁面(即HttpServletResponse.sendRedirect()

我的問題是:在我的servlet,我怎麼能檢索到登錄頁面集了在web.xml編程?

我知道loginConfig可以在StandardContext檢索但現在看來,這不是入店由於安全原因(StandardContext被包裹在ApplicationContext中又被包裹成ApplicationContextFacade,這是隻有我管理檢索)

有沒有人有任何線索如何獲得該信息?

謝謝!

回答

2

在當前的Servlet 3.1版本中沒有public API可用,因此Tomcat 7也沒有使用Servlet 3.0。您需要自己解析web.xml以提取感興趣的信息。

這是一個開始使用的指引。

String formLoginPage = XPathFactory.newInstance().newXPath().compile("web-app/login-config/form-login-config/form-login-page").evaluate(DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(getServletContext().getResourceAsStream("/WEB-INF/web.xml"))); 

期間ServletContextListener#contextInitialized()HttpServlet#init()足以做一次。

+0

因缺乏API而感到羞愧。雖然感謝了很多oneliner!它像一個魅力! –

+0

不客氣。 – BalusC

相關問題