0

組み込みの Jetty サーバーを使用してサードパーティの WAR を開始しました。だから私は WebAppContext を使用します:

Server server = new Server(port);
WebAppContext ctx = new WebAppContext();
ctx.setContextPath("/samplePath");
ctx.setWar(<PATH_TO_WAR>);
server.setHandler(ctx);
server.start();
server.join();

このコードは機能します (ここでは簡潔にするために例外処理を省略しました) が、戦争にいくつかの機能を追加したいと考えています。私の機能には、以下を追加するカスタム SSO ソリューションとの統合が含まれている必要があります。

  • コンテキスト リスナー
  • フィルター
  • これらのフィルターとリスナーによって読み取られる必要があるいくつかのコンテキスト パラメータ変数の定義

この SSO ソリューションは、私たちのチームによって開発されたものではなく、サードパーティとして採用されているため、変更できません。

したがって、これらすべてを web-fragment を使用してモジュールに追加することが最善の方法であると考えました。

私の質問は、Jetty の Web コンテキストがこの Web フラグメントを「認識する」ようにする最善の方法は何ですか? 動作するコード スニペットは素晴らしいでしょう :)

もちろん、これに対して Web フラグメントよりも優れた代替手段がある場合は、喜んでお知らせします。

現在使用している Jetty のバージョンは (pom.xml から): 9.2.10.v20150310 です。

よろしくお願いします!

4

1 に答える 1

0

Web アプリとフィルターを指定する方法は次のとおりです。

import java.io.IOException;
import java.util.EnumSet;

import javax.servlet.DispatcherType;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.server.handler.HandlerCollection;
import org.eclipse.jetty.servlet.ServletHandler;
import org.eclipse.jetty.webapp.WebAppContext;

public class MultipleHandler {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Server server = new Server();
        ServerConnector connectorA = new ServerConnector(server);
        connectorA.setPort(55);
        connectorA.setName("connA"); // connector name A
        server.addConnector(connectorA);
        HandlerCollection contexts = new HandlerCollection();
        server.setHandler(contexts);
        // A WebApp
        WebAppContext appA = new WebAppContext();
        appA.setContextPath("/samplePath");
        appA.setWar("<warFilePath>");
        appA.setVirtualHosts(new String[] { "@connA" }); // connector name A
        contexts.addHandler(appA);

        //Filter handler
        ServletHandler handler = new ServletHandler();
        handler.addFilterWithMapping(DoWork.class, "/filter",
                EnumSet.of(DispatcherType.REQUEST));
        contexts.addHandler(handler);       

        try {
            server.start(); 
            server.join(); 
        } catch (Throwable t) {
            t.printStackTrace(System.err);
        }

    }


    public static class DoWork implements Filter {

        @Override
        public void destroy() {
            // TODO Auto-generated method stub

        }

        @Override
        public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException {
             System.out.print("Request filtered");

        }

        @Override
        public void init(FilterConfig arg0) throws ServletException {
            // TODO Auto-generated method stub

        }

    }

}
于 2015-05-26T10:20:17.243 に答える