Hi!
I'm trying to autowire dependency into cusom implementation of ApplicationListener<AuthenticationSuccessEvent> but with no luck.
Code for listener:
It constantly throws: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())); } }
Full stack-trace is here: http://pastebin.com/67edzqQXCode: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)
My applicationContext.xml:
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" 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>
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 onesCode:<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>
Please advise



Reply With Quote