복붙노트

[SPRING] Java / Jetty : Embedded Jetty에 필터를 추가하는 방법

SPRING

Java / Jetty : Embedded Jetty에 필터를 추가하는 방법

임베디드 Jetty로 작업 중이며 각 요청 전에 인증을 확인하기 위해 서블릿 필터를 추가하려고합니다. 이 예제를 따라했지만 서명이 변경된 것 같습니다.

<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-server</artifactId>
    <version>9.0.4.v20130625</version>
</dependency>

내 방파제 스타터는 다음과 같이 보입니다.

public class JettyStarter {

    public static void main( final String[] args ) throws Exception {
        Server server = new Server(8080);
        final ServletHolder servletHolder = new ServletHolder(new CXFServlet());
        final ServletContextHandler context = new ServletContextHandler();
        context.setContextPath("/");
        // context.addFilter(AuthenticationFilter.class, "/*", FilterMapping.REQUEST);
        context.addServlet(servletHolder, "/platform/*");
        context.addEventListener(new ContextLoaderListener());
        context.setInitParameter("contextClass", AnnotationConfigWebApplicationContext.class.getName());
        context.setInitParameter("contextConfigLocation", Config.class.getName());
        server.setHandler(context);
        server.start();
        server.join();
    }
}

줄의 주석을 제거 할 때

// context.addFilter(AuthenticationFilter.class, "/*", FilterMapping.REQUEST);

나는 서명이 변경된 것을 발견했다. 그래서 작은 걸음을 뒤로 물려서 임베디드 부두와 함께 요청 초기에 실행되는 필터를 추가하고 조건이 충족 될 때만 요청을 계속하도록 허용하려면 어떻게해야합니까?

AuthenticationFilter 클래스의 시작은 다음과 같습니다.

import javax.servlet.*;
import java.io.IOException;

public class AuthenticationFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {}

    @Override
    public void doFilter(ServletRequest servletRequest, 
                         ServletResponse servletResponse, 
                         FilterChain filterChain) throws IOException, ServletException {}

    @Override
    public void destroy() {}

}

해결법

  1. ==============================

    1.EnumSet.of (DispatcherType.REQUEST)를 찾으려고합니다. 아래에 전체 예제가 포함되어 있습니다.

    EnumSet.of (DispatcherType.REQUEST)를 찾으려고합니다. 아래에 전체 예제가 포함되어 있습니다.

    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 javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.eclipse.jetty.server.Server;
    import org.eclipse.jetty.servlet.ServletHandler;
    
    public class JettyFilter {
    
      public static void main(final String[] args) throws Exception {
        Server server = new Server(8080);
    
        ServletHandler handler = new ServletHandler();
        server.setHandler(handler);
    
        handler.addServletWithMapping(HelloServlet.class, "/*");
        handler.addFilterWithMapping(HelloPrintingFilter.class, "/*",
            EnumSet.of(DispatcherType.REQUEST));
    
        server.start();
        server.join();
      }
    
      public static class HelloServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
          response.setContentType("text/html");
          response.setStatus(HttpServletResponse.SC_OK);
          response.getWriter().println("<h1>Hello SimpleServlet</h1>");
        }
      }
    
      public static class HelloPrintingFilter implements Filter {
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
          System.out.print("hello from filter");
        }
    
        @Override
        public void init(FilterConfig arg0) throws ServletException {
    
        }
    
        @Override
        public void destroy() {}
      }
    }
    
  2. from https://stackoverflow.com/questions/19530806/java-jetty-how-to-add-filter-to-embedded-jetty by cc-by-sa and MIT license