Results 1 to 3 of 3

Thread: NullPointerException when Initializing FilterSecurityInterceptor

  1. #1
    Join Date
    Dec 2005
    Posts
    4

    Default NullPointerException when Initializing FilterSecurityInterceptor

    Hi,

    I ran into a NullPointerException at afterPropertiesSet method when initializing the FilterSecurityInterceptor bean. Has anyone run into this problem before? The stack trace doesn't tell me much. I'm using Tomcat 5.5 with Spring 1.2.6 RC1 and Acegi 1.0 RC1.

    2006-01-02 20:04:58,656 ERROR [org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/SpringMVC]] - Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListe ner
    org.springframework.beans.factory.BeanCreationExce ption: Error creating bean with name 'securityEnforcementFilter' defined in ServletContext resource [/WEB-INF/SpringMVC-servlet.xml]: Can't resolve reference to bean 'filterInvocationInterceptor' while setting property 'filterSecurityInterceptor'; nested exception is org.springframework.beans.factory.BeanCreationExce ption: Error creating bean with name 'filterInvocationInterceptor' defined in ServletContext resource [/WEB-INF/SpringMVC-servlet.xml]: Initialization of bean failed; nested exception is java.lang.NullPointerException: null
    org.springframework.beans.factory.BeanCreationExce ption: Error creating bean with name 'filterInvocationInterceptor' defined in ServletContext resource [/WEB-INF/SpringMVC-servlet.xml]: Initialization of bean failed; nested exception is java.lang.NullPointerException: null
    java.lang.NullPointerException
    at org.acegisecurity.intercept.AbstractSecurityInterc eptor.afterPropertiesSet(AbstractSecurityIntercept or.java:251)
    at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.invokeInitMethods(Abstr actAutowireCapableBeanFactory.java:1059)
    at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.createBean(AbstractAuto wireCapableBeanFactory.java:363)
    at org.springframework.beans.factory.support.Abstract BeanFactory.getBean(AbstractBeanFactory.java:226)
    at org.springframework.beans.factory.support.Abstract BeanFactory.getBean(AbstractBeanFactory.java:147)
    at org.springframework.beans.factory.support.BeanDefi nitionValueResolver.resolveReference(BeanDefinitio nValueResolver.java:176)
    at org.springframework.beans.factory.support.BeanDefi nitionValueResolver.resolveValueIfNecessary(BeanDe finitionValueResolver.java:105)
    at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.applyPropertyValues(Abs tractAutowireCapableBeanFactory.java:1013)
    at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.populateBean(AbstractAu towireCapableBeanFactory.java:824)
    at org.springframework.beans.factory.support.Abstract AutowireCapableBeanFactory.createBean(AbstractAuto wireCapableBeanFactory.java:345)
    at org.springframework.beans.factory.support.Abstract BeanFactory.getBean(AbstractBeanFactory.java:226)
    at org.springframework.beans.factory.support.Abstract BeanFactory.getBean(AbstractBeanFactory.java:147)
    at org.springframework.beans.factory.support.DefaultL istableBeanFactory.preInstantiateSingletons(Defaul tListableBeanFactory.java:275)
    at org.springframework.context.support.AbstractApplic ationContext.refresh(AbstractApplicationContext.ja va:320)
    at org.springframework.web.context.support.AbstractRe freshableWebApplicationContext.refresh(AbstractRef reshableWebApplicationContext.java:134)
    at org.springframework.web.context.ContextLoader.crea teWebApplicationContext(ContextLoader.java:246)
    at org.springframework.web.context.ContextLoader.init WebApplicationContext(ContextLoader.java:184)
    at org.springframework.web.context.ContextLoaderListe ner.contextInitialized(ContextLoaderListener.java: 49)
    at org.apache.catalina.core.StandardContext.listenerS tart(StandardContext.java:3669)
    at org.apache.catalina.core.StandardContext.start(Sta ndardContext.java:4104)
    at org.apache.catalina.core.ContainerBase.addChildInt ernal(ContainerBase.java:759)
    at org.apache.catalina.core.ContainerBase.addChild(Co ntainerBase.java:739)
    at org.apache.catalina.core.StandardHost.addChild(Sta ndardHost.java:524)
    at org.apache.catalina.startup.HostConfig.deployDirec tory(HostConfig.java:894)
    at org.apache.catalina.startup.HostConfig.deployDirec tories(HostConfig.java:857)
    at

    This is my web.xml file:
    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <!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>
    	
    	<servlet>
    		<servlet-name>SpringMVC</servlet-name>
    		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    		<load-on-startup>1</load-on-startup>
    	</servlet>
    	
    	<servlet-mapping>
    		<servlet-name>SpringMVC</servlet-name>
    		<url-pattern>*.html</url-pattern>
    	</servlet-mapping>
    	
    	<context-param>
    	  <param-name>contextConfigLocation</param-name>
    	  <param-value>/WEB-INF/SpringMVC-servlet.xml</param-value>
    	</context-param>
    	
    	<listener>
    	  <listener-name>context</listener-name>
    	  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    	</listener> 
    	
    	<!--<welcome-file-list>
    		<welcome-file>
    			index.jsp
    		</welcome-file>
    	</welcome-file-list>-->
    	
    	<taglib>
        	<taglib-uri>/spring</taglib-uri>
        	<taglib-location>/WEB-INF/spring.tld</taglib-location>
    	</taglib>
    
    	<filter>
        	<filter-name>Acegi Authentication Processing Filter</filter-name>
        	<filter-class>org.acegisecurity.util.FilterToBeanProxy</filter-class>
    	    <init-param>
    	        <param-name>targetClass</param-name>
    	        <param-value>
    	        org.acegisecurity.ui.webapp.AuthenticationProcessingFilter
    	        </param-value>
    	    </init-param>
    	</filter>
    	
    	<filter-mapping>
        	<filter-name>Acegi Authentication Processing Filter</filter-name>
    	    <url-pattern>/*</url-pattern>
    	</filter-mapping>
    	
    	<filter>
    		<filter-name>Acegi Anonymous Processing Filter</filter-name>
    		<filter-class>org.acegisecurity.util.FilterToBeanProxy</filter-class>
    		<init-param>
    			<param-name>targetClass</param-name>
    			<param-value>org.acegisecurity.providers.anonymous.AnonymousProcessingFilter</param-value>
    		</init-param>
    	</filter>
    	
    	<filter-mapping>
    		<filter-name>Acegi Anonymous Processing Filter</filter-name>
    		<url-pattern>/*</url-pattern>
    	</filter-mapping>
    
    	<filter>
    	    <filter-name>Acegi HTTP Request Security Filter</filter-name>>
    	    <filter-class>org.acegisecurity.util.FilterToBeanProxy</filter-class>
    	
    	    <init-param>
    	        <param-name>targetClass</param-name>
    	        <param-value>
    	        org.acegisecurity.intercept.web.SecurityEnforcementFilter
    	        </param-value>
    	    </init-param>
    	</filter>
    	
    	<filter-mapping>
    	    <filter-name>Acegi HTTP Request Security Filter</filter-name>
    	    <url-pattern>/*</url-pattern>
    	</filter-mapping>
    	
    </web-app>
    This is the pertinent part of my application context file:
    Code:
    	
    	<bean id="authenticationManager" class="org.acegisecurity.providers.ProviderManager">
    	    <property name="providers">
    	        <list>
    	            <ref bean="daoAuthenticationProvider"/>
    	        </list>
    	    </property>
    	</bean>
    	
    	<bean id="authenticationProcessingFilter" class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter">
    	    <property name="authenticationManager">
    	        <ref bean="authenticationManager"/>
    	    </property>
    	    <property name="authenticationFailureUrl">
    	        <value>/login.html?error=1</value>
    	    </property>
    	    <property  name="defaultTargetUrl">
    	        <value>/home.html</value>
    	    </property>
    	    <property name="filterProcessesUrl">
    	        <value>/j_acegi_security_check</value>
    	    </property>
    	</bean>
    	
    	<bean id="anonymousProcessingFilter" class="org.acegisecurity.providers.anonymous.AnonymousProcessingFilter">
    		<property name="key"><value>anonUser</value></property>
    		<property name="userAttribute"><value>anonymousUser,ROLE_ANONYMOUS</value></property>
    	</bean>
    	
    	<bean id="anonymousAuthenticationProvider"	class="org.acegisecurity.providers.anonymous.AnonymousAuthenticationProvider">
    		<property name="key"><value>anonUser</value></property>
    	</bean>
    	
    	<bean id="securityEnforcementFilter"
    		class="org.acegisecurity.intercept.web.SecurityEnforcementFilter">
    		<property name="filterSecurityInterceptor"><ref bean="filterInvocationInterceptor"/></property>
    		<property name="authenticationEntryPoint"><ref bean="authenticationEntryPoint"/></property>
    	</bean>
    	
    	<bean id="authenticationEntryPoint"
    		class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint">
    		<property name="loginFormUrl"><value>/login.html</value></property>
    		<property name="forceHttps"><value>false</value></property>
    	</bean>
    	
    	<bean id="filterInvocationInterceptor"
    		class="org.acegisecurity.intercept.web.FilterSecurityInterceptor">
    		<property name="authenticationManager"><ref bean="authenticationManager"/></property>
    	    <property name="accessDecisionManager"><ref bean="accessDecisionManager"/></property>
    	    <property name="objectDefinitionSource">
    	        <value>
    	            CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
    	           PATTERN_TYPE_APACHE_ANT
    	            /login.*=ROLE_ANONYMOUS,ROLE_USER
    	            /*.css==ROLE_ANONYMOUS,ROLE_USER
    	            /*=ROLE_USER
    	        </value>
    	    </property>
    	</bean>	
    	
    	<bean id="roleVoter" class="org.acegisecurity.vote.RoleVoter"/>
    	
    	<bean id="accessDecisionManager" class="org.acegisecurity.vote.UnanimousBased">
    	    <property name="allowIfAllAbstainDecisions">
    	        <value>false</value>
    	    </property>
    	    <property name="decisionVoters">
    	        <list>
    	           <ref local="roleVoter"/>
    	        </list>
    	    </property>
    	</bean>
    Any insights would be appreciated!

    Thanks.
    Last edited by dubstar27; Jan 3rd, 2006 at 12:12 PM.

  2. #2
    Join Date
    Dec 2005
    Posts
    4

    Default

    I found the problem:

    The filterInvocationInterceptor bean's objectDefinitionSource property needs to be defined as follows (uses = rather than ==).

    <value>
    CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
    PATTERN_TYPE_APACHE_ANT
    /login.*=ROLE_ANONYMOUS,ROLE_USER
    /*.css=ROLE_ANONYMOUS,ROLE_USER
    /*=ROLE_USER
    </value>

  3. #3
    Luke Taylor is offline Senior Member Acegi Security System TeamSpring Team
    Join Date
    Aug 2004
    Location
    Glasgow, Scotland
    Posts
    3,449

    Default

    I've modified FilterInvocationDefinitionSourceEditor so that it will throw an exception if the parsed URL or config attribute is empty. That should make any errors like this easier to track down. The code splits the line on the '=' character so was ending up with an empty string for the attribute value.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •