Frage

Am trying to configure my custom filter AccountVerificationFilter with spring and am getting NPE, these are my configurations

I configured cpFilterCHain in web.xml as below

    <filter>
        <filter-name>cpFilterChain
        </filter-name>
        <filter-class>org.springframework.security.web.FilterChainProxy
        </filter-class>
    </filter>
    <filter>
        <filter-name>cpFilterChain
        </filter-name>
        <filter-class>org.springframework.security.web.FilterChainProxy
        </filter-class>
    </filter>

Here is my applicationCOntext.xml

    <bean id="accountVerificationFilter" class="com.dc.apps.cpportal.security.filter.AccountVerificationFilter" />

     <bean id="cpFilterChain" class="org.springframework.security.web.FilterChainProxy">
        <sec:filter-chain-map path-type="ant">
        <sec:filter-chain pattern="/**" filters="
           accountVerificationFilter" />
        </sec:filter-chain-map>
    </bean>

Here is my AccountVerificationFilter component

    @Component
    public class AccountVerificationFilter implements Filter {
    private static final String UPDATE_PASSWORD_URL = "/updatePassword.do";

    private static final String DO_ACTION_URL = ".do";

    private static final String IS_URL_VERIFIED = "isUrlVerified";

    private Long maxSessionTimeToLive = null;

    @Autowired
    protected DCAuthenticationSuccessHandler successHandler;

    @Autowired
    protected ApplicationUrlConfig applicationUrlConfig;

    @Autowired
    protected AuthenticationFilterConfiguration authenticationConfiguration;

    public void destroy() {
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException,
            ServletException {
        doFilterHttp((HttpServletRequest) request, (HttpServletResponse) response, filterChain);
    }
}

Am using spring security 3.1.4. Tomcat starts fine but when i goto my application am seeing this exception

    SEVERE: Servlet.service() for servlet [cpportal] in context with path [/cpportal] threw   exception
    java.lang.NullPointerException
    at org.springframework.security.web.FilterChainProxy.getFilters(FilterChainProxy.java:202)
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:176)
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at com.dc.core.common.SetXFrameOptionsFilter.doFilter(SetXFrameOptionsFilter.java:21)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101)
    at com.dc.core.common.FlashRecyclingFilter.doFilterInternal(FlashRecyclingFilter.java:21)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at com.dc.core.common.StripJSessionIdFilter.doFilter(StripJSessionIdFilter.java:101)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:722)

Can someone help me with this issue?

War es hilfreich?

Lösung

I think the problem is that the cpFilterChain in your web.xml is a duplicate object created by your application server and not the original instantiated by the spring container.

Try using the delegatingfilterproxy which delegates the filter task to a Spring bean

<filter>
    <filter-name>cpFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy
    </filter-class>
</filter>

<filter-mapping>
    <filter-name>cpFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top