Announcement Announcement Module
Collapse
No announcement yet.
Autowired annotation failure Page Title Module
Move Remove Collapse
X
Conversation Detail Module
Collapse
  • Filter
  • Time
  • Show
Clear All
new posts

  • Autowired annotation failure

    Hi!

    I'm trying to autowire dependency into cusom implementation of ApplicationListener<AuthenticationSuccessEvent> but with no luck.

    Code for listener:

    Code:
    package jwebtester.security;
    
    import jwebtester.dal.DataProvider;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.ApplicationListener;
    import org.springframework.context.annotation.Scope;
    import org.springframework.security.authentication.event.AuthenticationSuccessEvent;
    import org.springframework.stereotype.Component;
    
    @Component
    @Scope("request")
    public class LoginEventListener implements ApplicationListener<AuthenticationSuccessEvent> {
    
    	private static final Logger LOG = LoggerFactory.getLogger(LoginEventListener.class);
    	
    	@Autowired
    	DataProvider dataProvider;
    
    	@Override
    	public void onApplicationEvent(AuthenticationSuccessEvent event) {
    		// Authentication auth = event.getAuthentication();
    		LOG.info(String.format("Login succeeded=%s", event.getClass()));
    	}
    
    }
    It constantly throws:

    Code:
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'loginEventListener': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: jwebtester.dal.DataProvider jwebtester.security.LoginEventListener.dataProvider; nested exception is java.lang.UnsupportedOperationException
    	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:287)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1106)
    Full stack-trace is here: http://pastebin.com/67edzqQX

    My applicationContext.xml:

    Code:
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
    	xmlns:context="http://www.springframework.org/schema/context"
    	xmlns:aop="http://www.springframework.org/schema/aop"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans
    						http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
    						http://www.springframework.org/schema/tx
    						http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
    						http://www.springframework.org/schema/context
    						http://www.springframework.org/schema/context/spring-context-3.1.xsd
    						http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">
    
    	<context:component-scan base-package="jwebtester" />
    	<context:annotation-config />
    
    	<tx:annotation-driven transaction-manager="transactionManager" />
    	<aop:config proxy-target-class="true" />
    
    	<bean id="serverDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    		<property name="jndiName" value="java:comp/env/jdbc/TestDB" />
    	</bean>
    
    	<bean id="sessionFactory"
    		class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    		<property name="dataSource" ref="serverDataSource" />
    		<property name="packagesToScan" value="jwebtester.dal.entities" />
    		<property name="hibernateProperties">
    			<props>
    				<prop key="hibernate.connection.pool_size">10</prop>
    				<prop key="hibernate.connection.show_sql">true</prop>
    				<prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
    				<prop key="hibernate.show_sql">true</prop> 
    			</props>
    		</property>
    	</bean>
    
    	<bean id="transactionManager"
    		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    		<property name="sessionFactory" ref="sessionFactory" />
    	</bean>
    </beans>
    My spring-security.xml:

    Code:
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
    	xmlns:context="http://www.springframework.org/schema/context"
    	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:security="http://www.springframework.org/schema/security"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans
    						http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
    						http://www.springframework.org/schema/security
    						http://www.springframework.org/schema/security/spring-security-3.1.xsd">
    	<security:http auto-config="true" access-decision-manager-ref="accessDecisionManager">
    		<security:intercept-url pattern="/login/**"	access="ROLE_ANONYMOUS" />
    		<security:intercept-url pattern="/**" access="view_competency_models" />
    		<security:form-login login-page="/login/login.xhtml" />
    		<security:access-denied-handler	error-page="/access_denied.xhtml" />
    	</security:http>
    
    	<bean class="jwebtester.security.JdbcUserDetailsService" id="userDetailsService" />
    
    	<bean id="accessDecisionManager"
    		class="org.springframework.security.access.vote.AffirmativeBased">
    		<property name="decisionVoters">
    			<list>
    				<bean
    					class="org.springframework.security.web.access.expression.WebExpressionVoter" />
    				<bean class="org.springframework.security.access.vote.RoleVoter">
    					<property name="rolePrefix" value=""></property>
    				</bean>
    				<bean class="org.springframework.security.access.vote.AuthenticatedVoter" />
    			</list>
    		</property>
    	</bean>
    
    	<bean id="Sha512PasswordEncoder" class="jwebtester.security.Sha512PasswordEncoder" />
    
    	<security:authentication-manager alias="authenticationManager">
    		<security:authentication-provider
    			user-service-ref="userDetailsService">
    			<security:password-encoder ref="Sha512PasswordEncoder"></security:password-encoder>
    		</security:authentication-provider>
    	</security:authentication-manager>
    
    </beans>
    Autowiring for non spring-security beans works just fine. The same exception is thrown if I try to autowire dependency into custom UserDetailsManager implementation so I have to use JDBC data access methods instead of ORM ones

    Please advise
Working...
X