一尘不染

如何在Tomcat 7中以编程方式检索loginConfig?

tomcat

在Tomcat 7上,我设置了一个Realm来让容器管理身份验证过程。我还用相应的<security-constraint>和设置了web.xml

<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中设置的“登录”页面?

我知道loginConfig可以在中检索,StandardContext但是由于安全原因似乎不可行
(StandardContext包裹在ApplicationContext中,而ApplicationContext包裹在ApplicationContextFacade中,这是我设法检索的唯一内容)

有人对如何获取该信息有任何线索吗?

谢谢!


阅读 246

收藏
2020-06-16

共1个答案

一尘不染

当前的Servlet
3.1版本中没有可用的公共API,因此也没有Tomcat 7使用的Servlet
3.0中的公共API。您需要自行分析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()足够。

2020-06-16