在Tomcat 7上,我设置了一个Realm来让容器管理身份验证过程。我还使用相应的<security-constraint>
和
<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>
取决于用户在login.jsp(直接或通过OAuth)中选择的登录协议,可以将流重新路由到servlet,在调用HttpServletRequest.login()
之前我必须管理一些内容
如果没有,我想将流程重新路由回登录页面(即HttpServletResponse.sendRedirect()
。
我的问题是:在我的servlet中,如何以编程方式检索web.xml中设置的Login页面?
我知道可以在StandardContext
中检索loginConfig,但由于安全原因,它似乎无法访问(StandardContext包含在ApplicationContext中,而ApplicationContext又被包装到ApplicationContextFacade中,这是我唯一的事情设法检索
有没有人知道如何获取这些信息?
谢谢!
答案 0 :(得分:2)
当前的Servlet 3.1版本中没有public API,因此Tomcat 7中也没有使用Servlet 3.0。您需要自己解析web.xml
以提取感兴趣的信息。
这是一个开始使用的oneliner。
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()
期间执行一次就足够了。