Spring Security Erro

9 respostas
T

Galera estou lendo o livro Programacao Java para Web e empaquei no capitulo 6 onde o autor implementa o uso do framework springscucirty.

Ja fiz e refiz o exemplo do mesmo milhares de vezes e nao consigo entender o significado do erro abaixo:

<blockquote>GRAVE: Exception sending context initialized event to listener instance of class com.sun.faces.config.ConfigureListener

java.lang.LinkageError: loader constraint violation: when resolving interface method "javax.servlet.jsp.JspApplicationContext.getExpressionFactory()Ljavax/el/ExpressionFactory;" the class loader (instance of org/apache/catalina/loader/WebappClassLoader) of the current class, com/sun/faces/config/ConfigureListener, and the class loader (instance of org/apache/catalina/loader/StandardClassLoader) for resolved class, javax/servlet/jsp/JspApplicationContext, have different Class objects for the type javax/el/ExpressionFactory used in the signature

at com.sun.faces.config.ConfigureListener.registerELResolverAndListenerWithJsp(ConfigureListener.java:670)

at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:238)

at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3972)

at org.apache.catalina.core.StandardContext.start(StandardContext.java:4467)

at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)

at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)

at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)

at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)

at org.apache.catalina.core.StandardService.start(StandardService.java:519)

at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)

at org.apache.catalina.startup.Catalina.start(Catalina.java:581)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)

at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)

29/01/2011 16:58:25 org.apache.catalina.core.StandardContext start

GRAVE: Error listenerStart

29/01/2011 16:58:25 org.apache.catalina.core.StandardContext start

GRAVE: Context [/FinanceiroWEB2] startup failed due to previous errors

29/01/2011 16:58:25 org.apache.catalina.core.ApplicationContext log

INFO: Closing Spring root WebApplicationContext

29/01/2011 16:58:25 org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc

GRAVE: A web application registered the JBDC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.

29/01/2011 16:58:25 org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap

GRAVE: A web application created a ThreadLocal with key of type [null] (value [com.sun.faces.util.Util$1@39bde3d2]) and a value of type [java.util.HashMap] (value [{com.sun.faces.patternCache={ = }}]) but failed to remove it when the web application was stopped. To prevent a memory leak, the ThreadLocal has been forcibly removed.

</blockquote>

Alguem que trabalhe com esse framework ja viu esse erro? Segue abaixo os arquivos de configuracao:

applicationContext

&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;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"&gt;

	&lt;bean id="financeiroDataSource" class="org.springframework.jndi.JndiObjectFactoryBean"&gt;
		&lt;property name="jndiName"&gt;
			&lt;value&gt;java:comp/env/jdbc/FinanceiroDB&lt;/value&gt;
		&lt;/property&gt;
	&lt;/bean&gt; 	
&lt;/beans&gt;

applicationContext-security.xml

&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;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"&gt;
	&lt;http&gt;

		&lt;intercept-url pattern="/admin/**" access="ROLE_ADMINISTRADOR" /&gt;
		&lt;intercept-url pattern="/restrito/**" access="ROLE_USUARIO" /&gt;
		&lt;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_error=1" /&gt;
		&lt;logout/&gt;
		&lt;remember-me /&gt;
	&lt;/http&gt;

	&lt;authentication-manager&gt;
		&lt;authentication-provider&gt;
			&lt;jdbc-user-service data-source-ref="financeiroDataSource"
			
				authorities-by-username-query="SELECT u.login, p.permissao 
			  								     FROM usuario u, usuario_permissao p 
											    WHERE u.codigo = p.usuario 
											      AND u.login = ?"
											  
				users-by-username-query="SELECT login, senha, ativo 
									       FROM usuario 
									      WHERE login = ?" /&gt;
		&lt;/authentication-provider&gt;
	&lt;/authentication-manager&gt;
&lt;/b:beans&gt;

Por favor pessoal o livro e muito bom mas estou frustrado parado a nessa parte do livro a uma semana nao sei oq esta errado.

9 Respostas

I

Olá, thianolima,

Este não é um erro do springsecurity. Está mais parecendo erro de deploy de dependências cruzadas. Veja:

"when resolving interface method “javax.servlet.jsp.JspApplicationContext.getExpressionFactory()Ljavax/el/ExpressionFactory;”

Isso aí tah te dizendo que a classe javax.el.ExpressionFactory, em algum momento está sendo instanciada, provalelmente via reflexion e depois quando ela vai ser usada por outo método, este outro método está esperando uma classe que foi construida de outra forma.

Provavelmente vc tem uma lib no seu projeto que está conflitando com alguma lib do container aonde vc está deployando.
Este é o momento de vc descobrir qual é a lib e, se estiver usando maven, descobrir quem que usa esta lib e colocar um excludes.

É um daqueles erros chatos que dá um pusta trabalhão pra achar a causa… rs…

Primeiro descubra que classe é esta javax.el.ExpressionFactory.

Só pra vc não achar que sou mau, vou te dar mais uma ajuda. Segue um link muito útil nestas ocasiões:

http://www.findjar.com/index.x

Boa sorte… hehehehe

L

ver se o post do edson ti ajuda. http://www.edsongoncalves.com.br/category/spring/

T

Voces poderiam me dizer oa jars necessarios para executar o spring-security pois o livro indica pegar os jars de um sample que possui diversos jars e acho que tem coisa a mais. Tem como listar somente os jars necessarios para eu fazer uma limpeza aqui.
Seguindo a teoria iogui talvez isso ja resolva.

T

Seguindo as dicas eu baixei o spring novamente e o spring security separei os jars igual ao do post do edson golcalves e coloquei os jars que eu ja utilizava para o hibernate annotatios e o jsf2.

E agora que achei que tudo ia funcionar me gerou um erro maior ainda, bom pelo menos mudou de erro neh estamos progredindo…rs

E ae pessoal alguem pode me dar mais pistas sobre estes erros?

L

que estranho eu executei os procedimentos do edson e tive sucesso. pelo erros, tu ta com erro no teu bean, na criacao dele, outro é no dao, que ele nao está achando a classe, se tiver usando o eclipse e add jar por ele, verifique se de fato os .jars estao no lib, fisicamente o eclipse nao importa um arquivo fisicamente para o lib. tem que copiar na mao grande.

T

Galera consegui resolver o problema em partes na verdade consegui isola-lo
O erro gigante que estava dando era porque eu nao tinha inserido o jar do spring que controla o jdbc org.springframework.jdbc-3.0.0.RELEASE.jar
Mas depois de ter adicionado esse jar fiquei com problema na tela de login customizada que me gera a seguinte excecao abaixo:

Aqui esta o meu arquivo de contextApplication-security atuaizado

&lt;?xml version="1.0" encoding="UTF-8"?&gt;

&lt;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"&gt;
	
	
	
	&lt;!-- ESSA E A CONFIGURACAO ORIGINAL DO LIVRO MAS NAO ESTA FUNCIONANDO A CUSTOMIZACAO DA TELA LOGIN--&gt;
	&lt;http&gt;
		&lt;intercept-url pattern="/admin/**" access="ROLE_ADMINISTRADOR" /&gt;
		&lt;intercept-url pattern="/restrito/**" access="ROLE_USUARIO" /&gt; 
		&lt;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_error=1" /&gt;
		&lt;logout/&gt;		
		&lt;remember-me /&gt;
	&lt;/http&gt;
	
	&lt;!-- 
	&lt;http auto-config="true"&gt;	 
		&lt;intercept-url pattern="/admin/**" access="ROLE_ADMINISTRADOR" /&gt;
		&lt;intercept-url pattern="/restrito/**" access="ROLE_USUARIO" /&gt;
		&lt;logout/&gt;		
		&lt;remember-me /&gt; 	 
	&lt;/http&gt;
	--&gt;


	&lt;authentication-manager&gt;
		&lt;authentication-provider&gt;
			&lt;jdbc-user-service 
			    data-source-ref="financeiroDataSource"
			    
				authorities-by-username-query="SELECT u.login, p.permissao 
			  								     FROM usuario u, usuario_permissao p 
											    WHERE u.codigo = p.usuario 
											      AND u.login = ?"											  
				
				users-by-username-query="SELECT login, senha, ativo 
									       FROM usuario 
									      WHERE login = ?" /&gt;
		&lt;/authentication-provider&gt;
	&lt;/authentication-manager&gt;
&lt;/b:beans&gt;

Quando deixo a tela padrao tudo funciona numa boa, por enquanto deixei a tela de login padrao ja que pelo jeito ela nao vai interferir no momento para eu continuar minha leitura.

Aqui esta a minha tela de login, alguem pode me dar alguma ideia do que esta errado

&lt;?xml version="1.0" encoding="UTF-8" ?&gt;
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"
	  xmlns:h="http://java.sun.com/jsf/html"
	  xmlns:f="http://java.sun.com/jsp/jstl/core"&gt;
&lt;head&gt;
	&lt;title&gt;Login&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;h1&gt;Login&lt;/h1&gt;
	&lt;hr/&gt;
	&lt;h:form&gt;
		&lt;h:commandButton action="#{usuarioBean.novo}"  value="Registre-se"/&gt;
	&lt;/h:form&gt;
	
	&lt;h:panelGroup rendered="#{!empty param.login_error}"&gt;
		&lt;span style="font-color:red"&gt;Erro ao efetuar o login&lt;/span&gt;
		<br/>
		<br/>
		Motivo: #{SPRING_SECURITY_LAST_EXCEPTION.message}
	&lt;/h:panelGroup&gt;
	
	&lt;form id="login" action="post" action="#{request.contextPath}/j_spring_security_check"&gt;
		&lt;table&gt;
			&lt;tr&gt;
				&lt;td&gt;Login&lt;/td&gt;
				&lt;td&gt;&lt;input type="text" name="j_username"/&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
				&lt;td&gt;Senha&lt;/td&gt;
				&lt;td&gt;&lt;input type="password" name="j_password"/&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
				&lt;td align="right"&gt;&lt;input type="checkbox" name="_spring_security_remember_me"/&gt;&lt;/td&gt;
				&lt;td&gt;Entrar automaticament&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
				&lt;td/&gt;
				&lt;td&gt;&lt;input type="submit" value="Entrar"/&gt;&lt;/td&gt;
			&lt;/tr&gt;			
		&lt;/table&gt;
		&lt;script&gt;
			document.getElementById("login").j_username.value = "#{SPRING_SECURITY_LAST_USERNAME}";
		&lt;/script&gt;
	&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;

Para nao ficar mais nenhuma duvida aqui abaixo esta o arquivo web.xml configurado

&lt;?xml version="1.0" encoding="UTF-8"?&gt;

&lt;web-app id="WebApp_ID" 
         version="2.5"
         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_2_5.xsd"&gt; 


  &lt;display-name&gt;Financeiro WEB&lt;/display-name&gt;
  
  &lt;!-- DATASOURCE --&gt;  
  &lt;resource-ref&gt;
    &lt;description&gt;DataSource FinanceiroBD&lt;/description&gt;
    &lt;res-ref-name&gt;jdbc/FinanceiroDB&lt;/res-ref-name&gt;
    &lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt;
    &lt;res-auth&gt;Container&lt;/res-auth&gt;
  &lt;/resource-ref&gt;
  
    
  &lt;!-- INICIO SPRING --&gt;  
  &lt;context-param&gt;
    &lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;
    &lt;param-value&gt;
		/WEB-INF/applicationContext.xml
		/WEB-INF/applicationContext-security.xml
	&lt;/param-value&gt;
  &lt;/context-param&gt;
  
  &lt;filter&gt;
    &lt;filter-name&gt;springSecurityFilterChain&lt;/filter-name&gt;
    &lt;filter-class&gt;org.springframework.web.filter.DelegatingFilterProxy&lt;/filter-class&gt;
  &lt;/filter&gt;
  
  &lt;filter-mapping&gt;
    &lt;filter-name&gt;springSecurityFilterChain&lt;/filter-name&gt;
    &lt;url-pattern&gt;/*&lt;/url-pattern&gt;
  &lt;/filter-mapping&gt;
  
  &lt;listener&gt;
    &lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;/listener-class&gt;
  &lt;/listener&gt;
  &lt;!-- FIM SPRING --&gt;
  
  
  &lt;!-- INICIO JSF2 --&gt;
  &lt;servlet&gt;
    &lt;display-name&gt;FacesServlet&lt;/display-name&gt;
    &lt;servlet-name&gt;FacesServlet&lt;/servlet-name&gt;
    &lt;servlet-class&gt;javax.faces.webapp.FacesServlet&lt;/servlet-class&gt;
    &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;
  &lt;/servlet&gt;
  
  &lt;servlet-mapping&gt;
    &lt;servlet-name&gt;FacesServlet&lt;/servlet-name&gt;
    &lt;url-pattern&gt;*.jsf&lt;/url-pattern&gt;
  &lt;/servlet-mapping&gt;
  
  &lt;context-param&gt;
    &lt;param-name&gt;javax.faces.PORJECT_STAGE&lt;/param-name&gt;
    &lt;param-value&gt;Development&lt;/param-value&gt;
  &lt;/context-param&gt;
  &lt;!-- FIM JSF2 --&gt;
  
  
  &lt;!-- INICIO OPEN SESSION VIEW --&gt;
  &lt;filter&gt;
    &lt;filter-name&gt;conexaoFilter&lt;/filter-name&gt;
    &lt;filter-class&gt;financeiro.web.filter.ConexaoHibernateFilter&lt;/filter-class&gt;
  &lt;/filter&gt;
  
  &lt;filter-mapping&gt;
    &lt;filter-name&gt;conexaoFilter&lt;/filter-name&gt;
    &lt;url-pattern&gt;*.jsf&lt;/url-pattern&gt;
  &lt;/filter-mapping&gt;
  &lt;!-- FIM OPEN SESSION VIEW --&gt;  
 
  
  &lt;welcome-file-list&gt;
    &lt;welcome-file&gt;index.html&lt;/welcome-file&gt;
    &lt;welcome-file&gt;index.htm&lt;/welcome-file&gt;
    &lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;
  &lt;/welcome-file-list&gt;
&lt;/web-app&gt;

Alguem poderia tentar me ajudar o porque nao esta funcionando a costomizacao?

E

ola amigo, estou com o mesmo problema que você, quais .jar esta utilizando
do Spring Security, uma duvida, para eu utilizar o Spring Security tem que ter os .jar do Spring Framework ?
Este livro e muito bom, mas deixa a desejar em certos pontos.
Não estou conseguindo pular para o próximo capitulo, estava indo tão bem, mas agora está complicado.

Se tiver como me enviar os seus .jar !!!

[email removido]

Aguardo respostas, obrigado.

T

Ola amigo eu nao tenho mais esses arquivos e pra te falar a verdade nao me lembro muito bem como resolvi esse problema.
Para instalar o spring secutiry precisa do framework spring sim e esse livro peca em alguns pontos que o kra complicou demais por exemplo nao tinha necessidade de usar o spring security nesse projeto poderia fazer muito bem um filter para tratar a validacao de secao a validacoes que ele faz para apresentar certas regioes do site dependendo da permissao ele podeia fazer mto bem pela tag rendered do prorpio jsf.
Eu acabei usando esse livro para consultas pois voce pode se basear nos demais capitulo para reutilizar em outros projetos agora fazer o projeto inteiro nao consegui tambem e acabei um tanto frustrado.

E

thianolima, valeu ai pela resposta…vou dar mais uma pesquisa sobre erro e ver o que acho a respeito.
E uma pena pois gostaria muito de finalizar o projeto, mas mesmo assim obrigado pela suas observações.

Um grande abraçu…qualquer coisa estou por aki…valeuuu

Criado 29 de janeiro de 2011
Ultima resposta 29 de mar. de 2012
Respostas 9
Participantes 4