Jetty Server Configuration

I am using Jetty 9 and have some configuration issues. I just REST is working fine. But the problem started when I tried to add new headers to all requests and error handlers. The only way I can handle the headers is to add this code to each answer:

return Response.ok(murals)
                .header("Access-Control-Allow-Origin", "*")
                .header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT")
                .build(); 

Server Configuration:

        Server server = new Server(9998);
        ServletContextHandler servletContextHandler = new ServletContextHandler(server, "/", ServletContextHandler.SESSIONS);

        servletContextHandler.addFilter(GuiceFilter.class, "/*", EnumSet.allOf(DispatcherType.class));
        servletContextHandler.addServlet(DefaultServlet.class, "/");

        ResourceConfig rc = new ResourceConfig()
                .register(FilterHeaders.class)
                .register(ExceptionNotFound.class)
                .register(CORSFilter.class); //doesnt work
        new ServletHolder(new ServletContainer(rc));

        HandlerWrapper han = new HandlerWrapper();
        han.setHandler(new AbstractHandler() {

            @Override
            public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
               request.setAttribute("welcome","Hello"); //doesn't work
            }
        });

        servletContextHandler.addFilter(Filters.class, "/*", EnumSet.of(DispatcherType.REQUEST)); //doesnt work

        ResourceHandler resourceHandler = resourceHandler();
        servletContextHandler.setHandler(resourceHandler);
        servletContextHandler.setHandler(han);
        server.start();
        server.join();

CROSFilter Class

 public class CORSFilter implements ContainerResponseFilter {

        @Override
        public ContainerResponse filter(ContainerRequest request,
                ContainerResponse response) {

            response.getHttpHeaders().add("Access-Control-Allow-Origin", "*");
            response.getHttpHeaders().add("Access-Control-Allow-Headers",
                    "origin, content-type, accept, authorization");
            response.getHttpHeaders().add("Access-Control-Allow-Credentials", "true");
            response.getHttpHeaders().add("Access-Control-Allow-Methods",
                    "GET, POST, PUT, DELETE, OPTIONS, HEAD");

            return response;
        }

    }

How to register headers? What am I doing wrong? I do not use the WEB configuration.

+2
source share
2 answers

Jersey 1.x Jersey 2.x, . Jersey 1.x. ResourceConfig - 2.x. , 1.x ResourceConfig register(). 1.x,

resourceConfig.getContainerResponseFilters().add(new CORSFilter());

. 2.x . register .

, Jersey 2.x, 1.x. , , , . 2.x:

import java.io.IOException;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;

@Provider
public class CORSFilter implements ContainerResponseFilter {

    @Override
    public void filter(ContainerRequestContext request,
            ContainerResponseContext response) throws IOException {
        response.getHeaders().add("Access-Control-Allow-Origin", "*");
        response.getHeaders().add("Access-Control-Allow-Headers",
                "origin, content-type, accept, authorization");
        response.getHeaders().add("Access-Control-Allow-Credentials", "true");
        response.getHeaders().add("Access-Control-Allow-Methods",
                "GET, POST, PUT, DELETE, OPTIONS, HEAD");
    }
}

.

+3

, peeskillet, jetty.xml .

, , jetty.xml :

<New class="org.eclipse.jetty.servlet.ServletHolder">
<Arg>
    <New class="com.sun.jersey.spi.container.servlet.ServletContainer">
        <Arg>
            <New class="com.sun.jersey.api.core.PackagesResourceConfig">
                <Arg>
                    <Map>
                      <Entry>
                        <Item>com.sun.jersey.config.property.packages</Item>
                        <Item>...my package</Item>
                      </Entry>
                      <Entry>
                        <Item>com.sun.jersey.spi.container.ContainerResponseFilters</Item>
                        <Item>...MyCorsResponseFilter</Item>
                      </Entry>
                    </Map>
                </Arg>
            </New>
        </Arg>
    </New>
</Arg>

0

All Articles