如何在 Tomcat 7 中以编程方式检索登录配置?

2024-01-03

在 Tomcat 7 上,我设置了一个领域来让容器管理身份验证过程。我还设置了 web.xml 与相应的<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 中设置的登录页面?

我知道可以在以下位置检索登录配置StandardContext但由于安全原因似乎无法访问(StandardContext 包装在 ApplicationContext 中,而 ApplicationContext 又包装在 ApplicationContext Facade 中,这是我唯一能检索到的东西)

有谁知道如何获取该信息?

thanks!


没有公共API https://docs.oracle.com/javaee/7/api/javax/servlet/package-summary.html在当前 Servlet 3.1 版本中可用,因此在 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() or HttpServlet#init()足够了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Tomcat 7 中以编程方式检索登录配置? 的相关文章

随机推荐