Java过滤器在我尝试发出请求时不起作用

问题描述 投票:0回答:2

我有这个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

    }

}

似乎没有用。这是我的web.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>

有人可以给我一点点,让这个过滤器起作用吗?当我尝试请求时,控制台中没有消息“这里”。我看到了很多教程,并且代码似乎还不错。应该是一些错误,我看不到。谢谢您的帮助。

java servlet-filters
2个回答
0
投票

我的web.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>

现在运行!谢谢您的帮助!


-2
投票

这是我的过滤器:-

package 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>
© www.soinside.com 2019 - 2024. All rights reserved.