Hi,
I am trying to add spring security 3.0.5 to a GWT 2.1.1 application but something seems to elude me. I have a custom UserDetailsService with autowired beans. I'm using a hibernate 3.5.0 datasource. When I run the app i get the login page but when hit submit, im not logged in and there is no error or exceptions spewed by my code. When I use println statements to look how far the request goes in trying to log me in? it gets stuck at the findByUsername method on my UserDaoImpl class. Could someone show me where I'm going wrong.
This class extends UserDao which has 2 methods findByUsername() and saveUser().Code:import java.util.List; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import org.springframework.stereotype.Repository; import com.kibyegn.client.model.User; @Repository("userDao") public class UserDaoImpl extends HibernateDaoSupport implements UserDao { public void saveUser(User entity) { getHibernateTemplate().saveOrUpdate(entity); } @SuppressWarnings("unchecked") public User findByUsername(String username) { List<User> temp = getHibernateTemplate().find("select h from users h where username='" + username + "'"); if (temp.size() > 0) { System.out.println("Temp is not null"); return temp.get(0); } else { System.out.println("Temp is null"); return null; } } }
Code:import com.kibyegn.client.dao.UserDao; import com.kibyegn.client.model.User; @Service("userDetailsService") public class UserDetailsServiceImpl implements UserDetailsService { @Autowired private UserDao dao; @Transactional(readOnly = true) public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException { User userEntity = dao.findByUsername(username); if (userEntity == null) { throw new UsernameNotFoundException("user not found"); } else { String name = userEntity.getUsername(); String password = userEntity.getPassword(); boolean enabled = userEntity.isEnabled(); boolean accountNonExpired = userEntity.isEnabled(); boolean credentialsNonExpired = userEntity.isEnabled(); boolean accountNonLocked = userEntity.isEnabled(); System.out.println(name + ", " + password + ", " + enabled + ", " + accountNonExpired + ", " + credentialsNonExpired + ", " + accountNonLocked); Collection<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>(); authorities.add(new GrantedAuthorityImpl("ROLE_USER")); return new User(authorities, name, password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked); } } }applicationContext.xmlCode:<?xml version="1.0" encoding="UTF-8"?> <beans:beans xmlns="http://www.springframework.org/schema/security" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd" default-autowire="byName"> <context:component-scan base-package="com.kibyegn.server.auth"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"/> </context:component-scan> <beans:import resource="applicationContext-dao.xml" /> <http auto-config="true"> <intercept-url pattern="/kibyegn/**" access="ROLE_USER"/> <intercept-url pattern="/gwt/**" access="ROLE_USER"/> <intercept-url pattern="/**/*.html" access="ROLE_USER"/> <intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> <intercept-url pattern="/login.jsp*" access="IS_AUTHENTICATED_ANONYMOUSLY"/> <form-login login-page="/login.jsp"/> </http> <beans:bean id="daoAuthenticationProvider" class="org.springframework.security.authentication.dao.DaoAuthenticationProvider"> <beans:property name="userDetailsService" ref="userDetailsService"/> </beans:bean> <beans:bean id="authenticationManager" class="org.springframework.security.authentication.ProviderManager"> <beans:property name="providers"> <beans:list> <beans:ref local="daoAuthenticationProvider" /> </beans:list> </beans:property> </beans:bean> <authentication-manager> <authentication-provider user-service-ref="userDetailsService"> <password-encoder hash="md5"/> </authentication-provider> </authentication-manager> </beans:beans>
applicationContext-dao.xmlCode:<?xml version="1.0" encoding="UTF-8"?> <!-- DATASOURCE DEFINITON--> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd" default-autowire="byName"> <context:component-scan base-package="com.kibyegn.client.dao"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"/> </context:component-scan> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="org.postgresql.Driver" /> <property name="url" value="jdbc:postgresql://127.0.0.1:5432/GwtApp" /> <property name="username" value="postgres" /> <property name="password" value="password" /> </bean> <!-- HIBERNATE CONFIGURATION --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="annotatedClasses"> <list> <value>com.kibyegn.client.model.User</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> </props> </property> </bean> <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <bean id="userDao" class="com.kibyegn.client.dao.UserDaoImpl" scope="singleton"> <property name="hibernateTemplate" ref="hibernateTemplate" /> </bean> <bean id="userDetailsService" class="com.kibyegn.server.auth.UserDetailsServiceImpl"> </bean> </beans>
web.xmlCode:<?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> <!-- Spring security filters --> <filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>springSecurityFilterChain</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <listener> <listener-class> org.springframework.web.context.request.RequestContextListener</listener-class> </listener> <filter> <filter-name>hibernateFilter</filter-name> <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> </filter> <filter-mapping> <filter-name>hibernateFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- Servlets --> <servlet> <servlet-name>greetServlet</servlet-name> <servlet-class>com.kibyegn.server.GreetingServiceImpl</servlet-class> </servlet> <servlet-mapping> <servlet-name>greetServlet</servlet-name> <url-pattern>/kibyegn/greet</url-pattern> </servlet-mapping> <servlet> <servlet-name>authServlet</servlet-name> <servlet-class>com.kibyegn.server.AuthServiceImpl</servlet-class> </servlet> <servlet-mapping> <servlet-name>authServlet</servlet-name> <url-pattern>/kibyegn/auth</url-pattern> </servlet-mapping> <!-- Default page to serve --> <welcome-file-list> <welcome-file>kibyegn.html</welcome-file> </welcome-file-list> </web-app>


Reply With Quote
