Jetty开发过程中的自动登录

时间:2011-03-30 08:00:19

标签: jetty autologin

我有通常的设置:一个带有登录屏幕的webapp和一个小型Java类,它设置Jetty来启动应用程序。

在开发过程中,我们都会在每次更改代码后浪费几秒钟来登录,从而强制重启。 (不,JRebel没有帮助,因为它不会再次运行构造函数,因此它可能会遗漏一些更改。)

所以我想知道我是否可以这样修补Jetty设置:

如果我请求/index.jsp,而不是去真正的JSP,它应该加载一个servlet,它填写典型开发用户的用户名和密码,登录,然后重定向到主JSP应用程序。

为了使一切安全,我会将此自动登录代码放入测试路径,因此无法意外部署。

现在的问题是:如何在Java代码中配置Jetty中的URL重定向/重写?出于显而易见的原因,我不想触及web.xml

1 个答案:

答案 0 :(得分:0)

按照示例,我想出了这段代码:

private WebAppContext webapp;

private void configureAutoLogin() {
    ServletHolder holder = webapp.getServletHandler().newServletHolder();
    holder.setName("autologin");
    holder.setClassName( AutoLoginServlet.class.getName() );

    webapp.getServletHandler().addServlet(holder);

    ServletMapping mapping = new ServletMapping();
    mapping.setServletName(holder.getName());
    String[] paths = { "/autologin" };
    mapping.setPathSpecs( paths );

    webapp.getServletHandler().addServletMapping(mapping);
}

为了让用户更加简单,我还创建了一个目录jetty/,其中包含test.html,开发人员可以在其中添加指向此类URL的链接。为确保无法意外部署此测试HTML页面,我将jetty/目录添加到WebAppContext的基本资源中:

    File webAppDir = new File( "src/main/webapp" );
    Resource webAppResource = new FileResource( webAppDir.toURI().toURL() );
    Resource jettyDir = new FileResource( new File( "jetty" ).toURI().toURL() );

    ResourceCollection resources = new ResourceCollection( webAppResource, jettyDir );
    webapp.setBaseResource( resources );