Spring Security (ClassNotFoundException, porém classe está no build path)

Olás,

Já pesquisei diversos posts (inclusive aqui do GUJ), porém não consigo configurar o Spring Security em minha aplicação. Quando rodo, gera a seguinte exceção:

java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1688)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1533)
        ...

Já verifiquei e esta classe encontra-se no build path da minha app (Verificado através do atalho Ctrl+Shift+t).

Segue meus arquivos de configuração:

context.xml

<?xml version="1.0" encoding="UTF-8"?>
<Context reloadable="true">
	<Resource	name="jdbc/AIEDB" 
				auth="Container" 
				type="oracle.jdbc.pool.OracleDataSource"
				maxActive="100" 
				maxIdle="30" 
				maxWait="10000"
				username="teste" 
				password="teste" 
				driverClassName="oracle.jdbc.driver.OracleDriver"
				factory="oracle.jdbc.pool.OracleDataSourceFactory"
				url="jdbc:oracle:thin:@192.168.1.9:1521:nome_banco"/>
</Context>

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

	<bean id="aieDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
		<property name="jndiName">
			<value>java:/comp/env/jdbc/AIEDB</value>
		</property>
	</bean> 	
</beans>

applicationContext-security.xml

<?xml version="1.0" encoding="UTF-8"?>
<b:beans xmlns="http://www.springframework.org/schema/security"
	xmlns:b="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	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>

		<intercept-url pattern="/admin/**" access="ROLE_ADMINISTRADOR" />
		<intercept-url pattern="/restrito/**" access="ROLE_USUARIO" />
		<form-login login-page="/publico/login.jsf"
			always-use-default-target="true" default-target-url="/restrito/principal.jsf"
			authentication-failure-url="/publico/login.jsf?login_erro=true" />
		<logout />
		<remember-me />
	</http>

	<authentication-manager>
		<authentication-provider>
			<jdbc-user-service data-source-ref="aieDataSource"
				authorities-by-username-query="SELECT u.login, p.permissao 
											 	FROM usuario u, usuario_permissao p 
												WHERE u.id = p.id 
											  	AND u.login = ?"
				users-by-username-query="SELECT login, senha, ativo 
									   	  FROM usuario 
									  	  WHERE login = ?" />
		</authentication-provider>
	</authentication-manager>
</b:beans>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	id="WebApp_ID" version="3.0">

	<display-name>aie</display-name>

	<!-- SPRING SECURITY: definição dos arquivos de configuração -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			/WEB-INF/applicationContext.xml
			/WEB-INF/applicationContext-security.xml
		</param-value>
	</context-param>

	<!-- DATASOURCE JNDI -->
	<resource-ref>
		<description>DataSource AIEDB</description>
		<res-ref-name>jdbc/AIEDB</res-ref-name>
		<res-type>javax.sql.DataSource</res-type>
		<res-auth>Container</res-auth>
	</resource-ref>

	<!-- SPRING SECURITY: configuração do filtro para interceptar as requisições -->
	<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>

	<!-- JSF -->
	<context-param>
		<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
		<param-value>server</param-value>
	</context-param>
	<context-param>
		<param-name>com.sun.faces.expressionFactory</param-name>
		<param-value>com.sun.el.ExpressionFactoryImpl</param-value>
	</context-param>

	<!-- HIBERNATE: configuração do filtro para interceptar as requisições -->
	<filter>
		<filter-name>conexaoFilter</filter-name>
		<filter-class>br.gov.ibama.aie.web.filter.ConexaoHibernateFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>conexaoFilter</filter-name>
		<url-pattern>*.jsf</url-pattern>
	</filter-mapping>

	<!-- FACELETS <context-param> <param-name>javax.faces.DEFAULT_SUFFIX</param-name> 
		<param-value>.xhtml</param-value> </context-param> <context-param> <param-name>facelets.DEVELOPMENT</param-name> 
		<param-value>true</param-value> </context-param> -->

	<!-- JSF -->
	<servlet>
		<servlet-name>Faces Servlet</servlet-name>
		<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>

	<servlet-mapping>
		<servlet-name>Faces Servlet</servlet-name>
		<url-pattern>*.jsf</url-pattern>
	</servlet-mapping>

	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
	</welcome-file-list>

	<!-- PRIMEFACES -->
	<servlet>
		<servlet-name>Resource Servlet</servlet-name>
		<servlet-class>org.primefaces.resource.ResourceServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>Resource Servlet</servlet-name>
		<url-pattern>/primefaces_resource/*</url-pattern>
	</servlet-mapping>

	<context-param>
		<param-name>com.sun.faces.allowTextChildren</param-name>
		<param-value>true</param-value>
	</context-param>

</web-app>

Obrigado :wink:

Está rodando no WebSphere?

Se sim, qual versão? Tentou inverter a ordem do classloader no Servidor de aplicação, os problemas que tive aqui com Spring (assim como JSF 2) tinha a ver com um WAS antigo e a ordem do classloader, inclusive um notFound de uma classe que estava lá.

Olá Eduardo!

Estou tentando rodar no Tomcat 7. De quelaquer forma vou verificar ordem do classloader no Servidor, conforme vc falou.

Obrigado :wink:

[quote=maranata]Olá Eduardo!

Estou tentando rodar no Tomcat 7. De quelaquer forma vou verificar ordem do classloader no Servidor, conforme vc falou.

Obrigado ;)[/quote]

Hum… no tomcat acho difícil esse erro, no meu tomcat rolava na boa no WAS 6.x que ele zicava… tenta aí, qualquer coisa vamos tentar outra estratégia. :smiley:

Olá pessoal, boa tarde!

Alguma solução para esse problema? Estou passando pela mesma situação!!!

Poderiam me ajudar?!?..meu código está da mesma forma do apresentado(Livro - Programação Java para Web)

Abraço!

Pessoal, consegui sair do capítulo…e não fiz nada demais!

1º - Retirei todos os JAR’s da aplicação e recoloquei, atualizando o que tinha que atualizar…só no Spring Security que coloquei o 3.0.5…não sei se faz sentido mas como o facelets-taglib só vai até essa versão no site do repositório, resolvi deixar o SS da mesma versão pra ver qual é!!..e funfou aqui!

2º - A dica do Cristiano funcionou perfeitamente aqui. O “Bad Credencials” parou de acontecer quando retireia linha do algoritmo de criptografia da aplicação. Não testei ainda zerar a base, recolocar o MD5 de volta e depois cadastrar um usuário, assim que eu tiver mais tempo faço isso. Meu prazo pra entrega do sistema acaba dia 31…tô na m@#$da…

3º - Estou utilizando dois bancos ao mesmo tempo pra testar a aplicação. O MySQL é o padrão de todo desenvolvedor caseiro, mas como aqui só se usa Oracle, apanhei um pouquinho agora no final pra descobrir um erro que me aconteceu na hora de gerar a tabela de permissões pelo HIbernate. Um consultor aqui da empresa me socorreu nessa. O Oracle não aceita o “?autoReconnect=true”…estava dando erro direto pra criar a tabela. Quando ele viu isso e retirou, pq achou estranho esse código, retestei e funfou na moral…

Bom, agora vamos que vamos pq o tempo não pára, como dizia o poeta Cazuza…capítulo 7, aí vou eu…

Galera, qualquer coisa é só me mandar e-mail, blz?..estou a disposição pra tentar ajudar no que for preciso. No GUJ tbm é fácil de me localizar…eu postei algumas coisas lá sobre essas dúvidas do livro.

Abração!!! :slight_smile: