Java фильтр не работает, когда я пытался сделать запрос - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть фильтр Cors:

public class SimpleCorsFilter implements Filter {

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

    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
            throws IOException, ServletException {
        System.out.println("here");
        HttpServletResponse response = (HttpServletResponse) res;
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
        chain.doFilter(req, res);
        System.out.println("here2");

    }

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

    }

}

И, похоже, он не работает. Вот мой веб. xml:

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
    <display-name>Archetype Created Web Application</display-name>


    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:app-context.xml</param-value>
    </context-param>

    <filter>
        <filter-name>SimpleCORSFilter</filter-name>
        <filter-class>org.heller.filter.SimpleCorsFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>SimpleCORSFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <servlet>
        <servlet-name>app</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value></param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>app</servlet-name>
        <url-pattern>/app/*</url-pattern>
    </servlet-mapping>
</web-app>

Может кто-нибудь подсказать, как заставить этот фильтр работать? Когда я пытался сделать запрос, в консоли не было сообщения «здесь». Я видел много учебных пособий, и код, кажется, в порядке. Должна быть какая-то ошибка, которую я не вижу. Спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 01 мая 2020

Мой веб. xml выглядит так:

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
    <display-name>Archetype Created Web Application</display-name>


    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:app-context.xml</param-value>
    </context-param>

    <filter>
        <filter-name>SimpleCORSFilter</filter-name>
        <filter-class>org.heller.filter.SimpleCorsFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>SimpleCORSFilter</filter-name>
        <servlet-name>app</servlet-name>
    </filter-mapping>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <servlet>
        <servlet-name>app</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value></param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>app</servlet-name>
        <url-pattern>/app/*</url-pattern>
    </servlet-mapping>
</web-app>

И теперь он работает! Спасибо за помощь!

0 голосов
/ 28 апреля 2020

Это мой фильтр: -

пакет com.test.test.apis.filter;

public class AuthenticationFilter implements Filter{

    private FilterConfig filterConfig;;
    private List<String> excludedApiUrls;


    protected ServletContext servContext;

     private static final String AUTHENTICATION_HEADER_KEY = "Authorization";
     private static final String AUTHENTICATION_HEADER_VALUE_PREFIX = "Bearer "; // with trailing space to separate token

     @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        this.filterConfig = filterConfig;       
        String excludePattern = filterConfig.getInitParameter("excludedUrls");
        excludedApiUrls = Arrays.asList(excludePattern.split(","));
    } 



    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)throws IOException, ServletException {
        if (filterConfig == null) return;
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        if(!"OPTIONS".equalsIgnoreCase(request.getMethod())) {

            // filter logic
        }else {
            filterChain.doFilter(request, servletResponse);
        }


    }

    @Override
    public void destroy() {
        filterConfig = null;
    }

}

CORS Конфигурация: -

package com.test.test.apis.filter;
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;
    }
}

web. xml; -

<filter>
        <filter-name>ApiFilter</filter-name>
        <filter-class>com.test.test.apis.filter.AuthenticationFilter</filter-class>
        <init-param>
            <param-name>excludedUrls</param-name>
            <param-value>/tb/login/doLogin</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>ApiFilter</filter-name>
        <servlet-name>api-serlvet</servlet-name>
    </filter-mapping>

<servlet>
        <servlet-name>api-serlvet</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>com.test.test.apis.controllers</param-value>
        </init-param>
        <init-param>
          <param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name>
          <param-value>com.test.test.apis.filter.CORSFilter</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>api-serlvet</servlet-name>
        <url-pattern>/test/*</url-pattern>
    </servlet-mapping>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...