以编程方式添加过滤器和初始化参数

Jam*_*ite 4 spring spring-mvc servlet-filters yahoo-finance

我需要将 web.xml 的内容复制到 WebAppInitializer.class(Java 配置类)。我已经从 web.xml 复制了 YahooFilter 类(请参阅代码),但我不确定如何实用地添加 init-params。

我已在下面粘贴了 Java 配置类的 web.xml 和片段。有人可以看一下并提供一些反馈吗?

<web-app> 
     <display-name>sample</display-Aname> 
     <filter> 
         <filter-name>YOSFilter</filter-name> 
         <filter-class>com.yahoo.yos.YahooFilter</filter-class> 


         <!--  
         optional param - 
         underlying oauth client class 
         possible values: 
             net.oauth.client.URLConnectionClient (default) 
             net.oauth.client.httpclient3.HttpClient3 
             net.oauth.client.httpclient4.HttpClient4 
         --> 
         <init-param> 
             <param-name>oauthConnectionClass</param-name> 
             <param-value>net.oauth.client.httpclient4.HttpClient4</param-value> 
         </init-param> 
         <!--  
         optional param - 
         redirect end-user if an access token is not found, set to false if you  
         are only making two-legged oauth calls e.g. oauth calls without an  
         access token to retrieve public information 
         defauts to true 
         --> 
         <init-param> 
             <param-name>redirect</param-name> 
             <param-value>true</param-value> 
         </init-param> 
     </filter> 


     <!-- 
     The URL where the filter is mapped to will redirect the user to Yahoo for 
     authorization if an OAuth authorization token has not been obtained for the 
     user.  Should correspond to your callback url 
     --> 


     <filter-mapping> 
         <filter-name>YOSFilter</filter-name> 
         <url-pattern>/login.jsp</url-pattern> 
     </filter-mapping> 
 </web-app> 
Run Code Online (Sandbox Code Playgroud)

Java配置类

    public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
     ...

            @Override
        protected void registerDispatcherServlet(ServletContext servletContext) {
                    super.registerDispatcherServlet(servletContext);
            servletContext.addListener(new HttpSessionEventPublisher());

           // servletContext.addListener(new RequestContextListener());      
        }

             @Override
            protected Filter[] getServletFilters() {
                     DelegatingFilterProxy delegatingFilterProxy =  new DelegatingFilterProxy();
                    delegatingFilterProxy.setTargetBeanName("springSecurityFilterChain");
                    // FilterConfig filterConfig = delegatingFilterProxy.getFilterConfig();

                     YahooFilter yosFilter = new YahooFilter();


                    return  new Filter[] {delegatingFilterProxy,yosFilter};
            }
    }
Run Code Online (Sandbox Code Playgroud)

Boh*_*rdt 6

尝试重写onStartup()方法并以编程方式注册您的过滤器,ServletContext如下所示:

@Override
public void onStartup(ServletContext servletContext) throws ServletException {
    FilterRegistration yahooFilter = servletContext.addFilter("yahooFilter", new YahooFilter());
    yahooFilter.setInitParameter("oauthConnectionClass", "net.oauth.client.httpclient4.HttpClient4");
    yahooFilter.setInitParameter("redirect", "true");
}
Run Code Online (Sandbox Code Playgroud)