繁体   English   中英

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

[英]How can I retrieve loginConfig programatically in Tomcat 7?

在Tomcat 7上,我设置了一个Realm来让容器管理身份验证过程。 我还设置了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中设置的Login页面?

我知道可以在StandardContext检索loginConfig,但由于安全原因,它似乎无法访问(StandardContext包含在ApplicationContext中,而ApplicationContext又被包装到ApplicationContextFacade中,这是我设法检索的唯一内容)

有没有人知道如何获得这些信息?

谢谢!

当前的Servlet 3.1版本中没有可用的公共API ,因此也没有Tomcat 7使用的Servlet 3.0中的公共API 。您需要自己解析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() ServletContextListener#contextInitialized()期间执行一次就足够了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM