Tutorial: VRaptor + Spring Security 3

34 respostas
yorgan

Olá pessoal,
Acabei de publicar no meu blog um post sobre segurança utilizando VRaptor 3 com Spring Security 3.

Para quem tiver interesse, segue o link:
http://dkist.me/blog/2010/09/spring-security/

[]´s
Daniel

34 Respostas

Lucas_Cavalcanti

Muito bom!

só um detalhe:

<%
	if(request.getParameter("error") != null){
	    if (request.getParameter("error").equals("invalido")){
	        %>

é a mesma coisa que:

<c:if test="${param.error eq 'invalido'}">

</c:if>
yorgan

Bem lembrado.
Acabei de ajustar no post.

Vlww Lucas.

[]´s
Daniel

maxmustang

Boa Yorgan, to começando a usar o VRaptor agora, nossa… melhor framework
pessoal da Caelum, fez um trabalho excelente com ele
abração

Guevara

Beleza Yorgan?
Segui a dica do seu tutorial, bem explicado pra poder usar com VRaptor, já consegui fazer o bicho rodar, só ficou uma dúvida na autenticação, lá na query vc colocou:

<jdbc-user-service data-source-ref="dataSource"

			users-by-username-query="SELECT login as username, senha as password, 'true' as enable FROM usuario u WHERE login = ?"
			authorities-by-username-query="SELECT u.login as username, r.nome as authority FROM usuario u, role r WHERE u.id_role = r.id_role AND login = ?"/>

Fiz a adaptação pro que eu tenho:

<jdbc-user-service data-source-ref="dataSource"
			users-by-username-query="SELECT login as username, senha as password, 'true' as enable FROM usuario WHERE login = ?"
			authorities-by-username-query="SELECT u.login as username, r.nome as authority FROM usuario u, role r WHERE u.role_id = r.id AND login = ?"/>
		</authentication-provider>

Mas o retorno é este:

6:01:57,867 DEBUG [OgnlParametersProvider] Applying error with [invalido]
16:01:57,873 DEBUG [OgnlParametersProvider] cant find property for expression error ignoring
16:01:57,873 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for LoginController.login() as []
16:01:57,873 DEBUG [ParametersInstantiatorInterceptor] Parameter values for [DefaultResourceMethod: LoginController.loginLoginController.login()] are []
16:01:57,887 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ExecuteMethodInterceptor
16:01:57,887 DEBUG [ExecuteMethodInterceptor] Invoking LoginController.login()
16:01:57,890 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor OutjectResult
16:01:57,894 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ForwardToDefaultViewInterceptor
16:01:57,894 DEBUG [ForwardToDefaultViewInterceptor] forwarding to the dafault page for this logic
16:01:57,901 DEBUG [DefaultPageResult   ] forwarding to /WEB-INF/jsp/login/login.jsp

Pelo visto não está recebendo o usuário e senha do form, ou a query está errada, já que recebo a mensagem de usuário ou senha inválidos:

<form action="<c:url value="/j_spring_security_check"/>" method="POST">
	<fieldset>
	Usu&aacute;rio: <input type="text" name="j_username" />
	Senha:<input type="password" name="j_password" />
	<button type="submit">Enviar</button>
	</fieldset>
</form>

A tabela Usuario possui, PK id_usuario, FK id_role, nome, login e senha, a tabela Role possui PK id_role e nome = ROLE_ADMIN.

Abraço!

Guevara

Parece ser algum problema com a url de falha de autenticação.

authentication-failure-url="/login?error=invalido"
Guevara

Descobri o problema, era o hash da senha:

<password-encoder hash="plaintext" />

Como eu inseri a senha manualmente no banco, ele estava tentando ler senha em md5.
Sugestão para acrescentar ao tutorial: :smiley:
Especificar que está usando senha encryptada sendo necessário anotação específica no atributo “senha” na Classe Usuario.
Tô vendo agora qual é essa anotação. Se alguém souber, agradeço de antemão. \o/
Abraço!

Lavieri

Eu estou tentando usar esse trem, mas estou tendo um problemão =//

ele roda blz, quando o controlle é nulo, mas se o controle tiver DI, ele da um problema de dizer que o construtor não é nulo.

Caused by: org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class [class br.com.simtecnologia.lavierie.controller.login.TesteController]: Common causes of this problem include using a final class or a non-visible class; nested exception is java.lang.IllegalArgumentException: Superclass has no null constructors but no arguments were given

@Resource
public class TesteController {
	public TesteController(UsuarioQuery query) {
		this.query = query;
	}

//...

	@RolesAllowed("teste")
	public void teste() {
		
	}
	
	@RolesAllowed("admin")
	public void admin() {
		
	}

Em resumo, invibializa todo o processo de usar, com vraptor…

se alguem tiver uma solução para isto por favor estou no aguardo.

Lavieri

Ahh, uma observação, o erro só ocorre quando o metodo é anotado com o @RolesAllowed()

Talvez seja algo da configuração do meu global-method-security…

pois ele não esta conseguindo fazer direito a intervenção…

&lt;global-method-security pre-post-annotations="enabled" jsr250-annotations="enabled"&gt; &lt;/global-method-security&gt;

yorgan

Lavieri:
Eu estou tentando usar esse trem, mas estou tendo um problemão =//

ele roda blz, quando o controlle é nulo, mas se o controle tiver DI, ele da um problema de dizer que o construtor não é nulo.

Caused by: org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class [class br.com.simtecnologia.lavierie.controller.login.TesteController]: Common causes of this problem include using a final class or a non-visible class; nested exception is java.lang.IllegalArgumentException: Superclass has no null constructors but no arguments were given

@Resource
public class TesteController {
	public TesteController(UsuarioQuery query) {
		this.query = query;
	}

//...

	@RolesAllowed("teste")
	public void teste() {
		
	}
	
	@RolesAllowed("admin")
	public void admin() {
		
	}

Em resumo, invibializa todo o processo de usar, com vraptor…

se alguem tiver uma solução para isto por favor estou no aguardo.

P/ mim ta parecendo que o problema é no seu UsuarioQuery utilizado no construtor.
Já tentou utilizar sem ele?

[]´s
Daniel

yorgan

Guevara:
Descobri o problema, era o hash da senha:

<password-encoder hash="plaintext" />

Como eu inseri a senha manualmente no banco, ele estava tentando ler senha em md5.
Sugestão para acrescentar ao tutorial: :smiley:
Especificar que está usando senha encryptada sendo necessário anotação específica no atributo “senha” na Classe Usuario.
Tô vendo agora qual é essa anotação. Se alguém souber, agradeço de antemão. \o/
Abraço!

Bem lembrado Guevara.
Já adicionei uma observação para utilizar plaintext caso não seja necessário encriptar e uma classe demonstrando como utilizar o MD5.

[]´s
Daniel

Lavieri

yorgan:
Lavieri:
Eu estou tentando usar esse trem, mas estou tendo um problemão =//

ele roda blz, quando o controlle é nulo, mas se o controle tiver DI, ele da um problema de dizer que o construtor não é nulo.

Caused by: org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class [class br.com.simtecnologia.lavierie.controller.login.TesteController]: Common causes of this problem include using a final class or a non-visible class; nested exception is java.lang.IllegalArgumentException: Superclass has no null constructors but no arguments were given

@Resource
public class TesteController {
	public TesteController(UsuarioQuery query) {
		this.query = query;
	}

//...

	@RolesAllowed("teste")
	public void teste() {
		
	}
	
	@RolesAllowed("admin")
	public void admin() {
		
	}

Em resumo, invibializa todo o processo de usar, com vraptor…

se alguem tiver uma solução para isto por favor estou no aguardo.

P/ mim ta parecendo que o problema é no seu UsuarioQuery utilizado no construtor.
Já tentou utilizar sem ele?

[]´s
Daniel

Nop, não é o caso, funciona quando esta sem o Spring Security, além disso o erro acontece com a tentativa de injeção de qualquer componente, já tentei injetar componentes que tenho 100% de certeza q estariam ok, como o HttpServletRequest, entre outros, e nada funciona…

Como pedi segurança nos métodos, ele vai tentar proxyar a intancia, só que pelo visto, ele não consegue fazer isso, devido ao construror.

enfim, não sei se o lucas vai ter uma solução…

yorgan

Agora não tenho como, mas à noite vou testar esse seu caso.

[]´s
Daniel

Lavieri

pior que é um problema no proxy, pq ele tenta proxyar, e só sabe fazendo usando o contrutor default pelo visto.

mas o “global-method-security” tem a opção, proxy-target-class, ja tentei colocar ela como “false” e o problema continua… =/

Lucas_Cavalcanti

no pior dos casos dá pra trocar injeção por construtor para injeção por setter… só anotar os setters com @Autowired do spring

Lavieri

o Ruim é que não seria facilmente acoplado a um projeto ja existente… ter que mudar a forma de programar, ou de usar o framework vraptor pela limitação do Security é o que me deixa angustiado… se tiver que fazer isso a cada nova tecnologia que tentar adicionar fica dificil.

Minha ideia era usar o Security pra ajudar no processo, não pra dificultar, ter que mudar a implementação de cada um dos meus componentes só pra atender a isto é tenso…

Ainda por cima, sendo o caso de que na propria api, fala que tem a opção de não usar proxy, mas que aparentemente é ignorada.

estou aqui tentanfo fazer mais configurações, vendo se consigo configurar pelo AOP do spring, para não ter q mudar o projeto.

Queria saber de você lucas, como o vraptor faz, para induzir o spring a usar injeção pelo construtor.

Lavieri

Consegui resolver, não é da forma que eu gostaria, mas entendi melhor o problema, e consegui resolver

@Resource
public class TesteController {
	
	private final UsuarioQuery query;
	
	/**
	 * Used only by CGLIB/Reflection proxy.
	 * @deprecated instead use {@link #TesteController(UsuarioQuery)} 
	 * or possibly {@link NullPointerException} will be throwed.
	 */
	@Deprecated
	protected TesteController() {this(null);}
	
	public TesteController(UsuarioQuery query) {
		this.query = query;
	}
	
	@RolesAllowed("teste")
	public void checkLogin(String login) {
		if (query.isAlreadyExistsLogin(login))
			System.out.println("uia já existe");
		else
			System.out.println("ta livre!!!");
	}
	
	@RolesAllowed("admin")
	public void admin() {
		
	}
	
}

assim vai ser possível para o proxy do security proxyar minha classe, guardar a referencia da classe real dentro dela e invocar o método quando a autorização der ok.

Pensei q isso poderia gerar NPE, mas já vi que não gera...

outra coisa é que quando se usa interface nos componentes (não da pra fazer isso com os @Resources) nem precisa do contrutor nulo, já que o security vai proxyar a interface.

Lucas_Cavalcanti

putz, não sei dizer qual é a mágica… sei que a classe que seleciona quais componentes serão registrados é a ComponentScanner…

os componentes do VRaptor são registrados no VRaptorApplicationContext
numa das linhas dele tem isso:

AopConfigUtils.registerAspectJAnnotationAutoProxyCreatorIfNecessary(beanFactory);
Kardok

Bom dia , caros amigos estou com um pequeno problema,
Consegui fazer o Spring Security Rodar, Funcionar buscando os usuarios e roles do banco.
Mas , no caso , preciso controlar o Acesso em nivel de metodo,

Tem algum modo de deixar esse trecho do codigo Dinamico?

Algo como recuperar as urls e acessos do banco?
Alguem implementou algo parecido ?
esta é a função da @RolesAllowed ?

obrigado.

Guevara

Olá kardok!
O Controle é assim mesmo, só colocar lá no seu aplicationContext.xml:

<intercept-url  pattern="/usuario/**" access="ROLE_ADMIN" />
		<intercept-url  pattern="/proprietario/**" access="ROLE_ADMIN" />
		<intercept-url  pattern="/imovel/**" access="ROLE_ADMIN" />

Ou vc pode restringir um método específico, por exemplo, a listagem de proprietários:

<intercept-url  pattern="/proprietario/lista" access="ROLE_ADMIN" />

O asterisco vc libera todos os métodos dentro do controller proprietário, ou posso restringir por cada método, no exemplo acima restringi o lista().
Têm outras dicas no manual do Spring:
http://static.springsource.org/spring-security/site/reference.html
Tô quase implementando o insert de um usuário admin caso não exista, assim ao subir a aplicação, terei um usuário pronto para logar. =)
Outra coisa legal, é implementar o controle de usuários logados, mostrá-los numa lista lá na jsp. Depois vou ver isso.
Abraço!

Kardok

Pesquisei no FAQ do SpringSecurity , [url]http://static.springsource.org/spring-security/site/faq.html#faq-dynamic-url-metadata[/url]
e verifiquei que para fazer o que quero preciso implementar um codigo desse tipo
Só que nao entendi como usar o trecho? ConfigAttribute ?
Alguem tem alguma ideia ou exemplo de implementaçao ?

public class FiltroSecurityMetadata implements FilterInvocationSecurityMetadataSource {

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.springframework.security.access.ConfigAttribute;
import org.springframework.security.web.FilterInvocation;
import org.springframework.security.web.access.intercept.FilterInvocationSecurityMetadataSource;

public class MeuFiltroSecurityMetadata implements FilterInvocationSecurityMetadataSource {

    public List<ConfigAttribute> getAttributes(Object object) {
        FilterInvocation fi = (FilterInvocation) object;
        String url = fi.getRequestUrl();
        String httpMethod = fi.getRequest().getMethod();
        List<ConfigAttribute> attributes = new ArrayList<ConfigAttribute>();
  
        // Lookup your database (or other source) using this information and populate the
        // list of attributes

        return attributes;
    }

    public Collection<ConfigAttribute> getAllConfigAttributes() {
        return null;
    }

    public boolean supports(Class<?> clazz) {
        return FilterInvocation.class.isAssignableFrom(clazz);
    }
}
}
Kardok

Guevara:
Olá kardok!
O Controle é assim mesmo, só colocar lá no seu aplicationContext.xml:

<intercept-url  pattern="/usuario/**" access="ROLE_ADMIN" />
		<intercept-url  pattern="/proprietario/**" access="ROLE_ADMIN" />
		<intercept-url  pattern="/imovel/**" access="ROLE_ADMIN" />

Ou vc pode restringir um método específico, por exemplo, a listagem de proprietários:

<intercept-url  pattern="/proprietario/lista" access="ROLE_ADMIN" />

O asterisco vc libera todos os métodos dentro do controller proprietário, ou posso restringir por cada método, no exemplo acima restringi o lista().
Têm outras dicas no manual do Spring:
http://static.springsource.org/spring-security/site/reference.html
Tô quase implementando o insert de um usuário admin caso não exista, assim ao subir a aplicação, terei um usuário pronto para logar. =)
Outra coisa legal, é implementar o controle de usuários logados, mostrá-los numa lista lá na jsp. Depois vou ver isso.
Abraço!

Então o que eu preciso é que essas intercep-url , fossem criadas a partir do meu Banco de dados.
uma tabela onde colocasse por exemplo duas colunas (pattern e access)
Caso queira mudar alguma configuraçao no acesso , seria feito somente no banco (tabela).

Lavieri

Eu implentei sim … E é com @rolled

Estou lingando o pc e jaja posto como fiz

Lavieri

Obs.: esse texto foi digitado a uma distancia de 5 metros da minha TV, não estava conseguindo ler direito o que escrevia, então deve estar cheio de erros de português e etc...

o que existe de importante dentro do meu xml e' o seguinte:

applicationContext-security.xml so esta no XML as partes importantes...

alem disto, vou mostrar as implementacoes de DefaultAuthenticationProvider, e de DefaultLogoutSuccessHandler, o outro citado neste exemplo, nao vou mostrar o source, pois a minha implementacao, nada mais e' do que algo que lanca uma excecao quando invocado... o xml me exigiu colocar um user-service-ref e apenas por isto, ele existe no meu codigo...

o mais importante no meu exemplo e' o DefaultAuthenticationProvider, e' nele que eu decido se o cara tem ou nao credenciais para logar...

codigo fonte =>DefaultAuthenticationProvider

Entao, explicando o codigo de login,

1 - eu recupero minha factory de EntityManager, a partir de uma classe utilitaria, ComponentLookup, que fiz do vraptor, ela usa um truque, para manter o container, mesmo fora de uma thread do vraptor, a partir do container, e' possivel pegar componentes de dentro do vraptor. Obs.: a autenticacao e feita fora de qualquer scopo do spring, apenas objetos em application scopo estao disponivel, e este e' o caso de um EntityManagerFacotry.

2 - eu crio um entity manager para a tentativa de login

3 - Sempre que uma autenticacao e' feita, o spring envia um objeto Authentication (do tipo WebAuthenticationDetails) para o meu provider, no provider, eu recupero as informacoes de autenticacao: senha,login,ip,sessionid, etc, uso todas elas para guardar um historico de tentativas de login no banco (vc nao precisa fazer isso) ...

4 - Eu busco pelo usuario, no banco, atraves do login, apos isto, sigo alguns fluxos distingtos:
4.1 - caso nao encontre o usuario, um NoResultException e' lacada, neste caso eu a capturo e a transformo em uma UsernameNotFoundException, para que o spring entenda a excecao...
4.2 - caso encontre eu checo a senha, e neste caso:
4.2.1 - caso a senha falhe, eu lanco uma BadCredentialsException, para que o spring entenda o erro.
4.2.2 - caso a senha seja validada, eu prossigo com a autenticacao. Criando um objeto do tipo Authentication, ver item 5.

5 - Criando o objeto de autenticacao eu informo como principal o Usuario (para o bom funcionamento o objeto que fica no principal, quando invocado o seu toString() tem que resultar no login de acesso do usuario), no caso o meu objeto Usuario faz isto, a senha eu mantenho nula por motivos de seguranca.

6 - Recupero a lista de permissoes do usuario, essa lista contem os GrantAuthority, o toString() destes objetos tem que bater com o que sera usado no @RolledAllowed, ou seja, essa sao as permissoes usadas.

.........

Apos a autneticacao, o usuario logado pode ser recuperado de qualquer ponto do programa da seuinte forma:

Authentication autenticacao = SecurityContextHolder.getContext().getAuthentication();
		Usuario usuarioLogado = (Usuario)autenticacao.getPrincipal();

Obs.: esse codigo acima, pode gerar uma excessao de NPE caso nao haja usuario logado, ou uma ClassCastEx caso o usuario logado nao seja do tipo Usuario.

.........

Outra observacao e' que seus objeto que tiverem a anotacao @RolledAllowed, vao ter que ter o contrutor default definido, e caso precisem de injecao de dependencia, vao ter que ter o segundo construtor com a anotacao @Autowired, para que o vraptor/spring saiba que e' para usar o construtor com argumentos, e injetar as dependencias neel, por exemplo...

package br.com.simtecnologia.lavierie.controller.teste;

import javax.annotation.security.RolesAllowed;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;

import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.simtecnologia.lavierie.business.persistence.queries.UsuarioQuery;

@Resource
public class TesteController {
	
	private final UsuarioQuery query;
	private final Result result;
	
	@Autowired
	public TesteController(UsuarioQuery query, Result result) {
		this.query = query;
		this.result = result;
	}
	
	/**
	 * Used only by CGLIB/Reflection proxy.
	 * @deprecated instead use {@link #TesteController(UsuarioQuery,Result)} 
	 * or possibly {@link NullPointerException} will be throwed.
	 */
	@Deprecated
	protected TesteController() {
		this(null,null);
		//as linhas abaixo so existem para garantir que caso o construtor
		//errado seja invocado uma exececao seja lancada...
		//assim apenas uma classe proxiada pode invocar este construtor...
		//caso queira vc pode dispensar essas duas linhas abaixo.
		if (getClass().equals(TesteController.class)) 
			throw new UnsupportedOperationException();

	}
	
	public void form() {}

	@Post
	@RolesAllowed(&quot;teste&quot;)
	public void checkLogin(String login) {
		Authentication temp = SecurityContextHolder.getContext().getAuthentication();
		Object teste = temp.getPrincipal();
		result.include(&quot;livre&quot;, !query.isAlreadyExistsLogin(login));
		result.include(&quot;login&quot;, login);
	}
	
	public void admin() {	}
	
}

ao acessar o link /teste/form, um formulario e' carregado...
ao enviar os dados para o /teste/checkLogin (via post) o spring security intercepta, levando vc para uma pagina de login...
caso o login seja bem sucedido, e' checado se o usuario tem em seus GrantAuthority autorizacao para "teste" que foi o que declarei em @RolledAllowed, em caso negativo vc sera levado para erro 403 (acesso negado) em caso positivo, o processo sera retomado, o post sera concluindo, e a logica do controle sera executada.

Qualquer duvida vc fala ai

............

Ah quase que esqueco, o meu handler de logout e' assim

DefaultLogoutSuccessHandler voce nao precisa implementar isto, a nao ser, que como eu, queira manter um historico de login/logout do sistema...

natanaelpantoja

Opa,

Vi essa sua explicação e estou passando pelo menos problema, eu estou fazendo exatamente como o Lavieri a dúvida é, não consigo pegar os dados do login no meu Provider customizado.

Como você está pegando essas informações? Não entendi muito bem o lance do controller… No teu form de login você manda para qual URL?

Abração

C

Bom tentei implementar o projeto mas não consegui, estou usando o V-Raptor VRaptor 3.1.1, Spring 3.0.3 e Spring Security 3.0.2, ao tentar acessar a URL ocorre este erro:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'br.com.caelum.vraptor.http.EncodingHandlerFactory': FactoryBean threw exception on object creation; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'encodingHandlerFactory': Unsatisfied dependency expressed through constructor argument with index 0 of type [javax.servlet.ServletContext]: : No unique bean of type [javax.servlet.ServletContext] is defined: expected single matching bean but found 2: [javax.servlet.ServletContext, servletContext]; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [javax.servlet.ServletContext] is defined: expected single matching bean but found 2: [javax.servlet.ServletContext, servletContext]
	org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:150)
	org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:109)
	org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1387)
	org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:244)
	org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
	org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:385)
	org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:375)
	org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1069)
	org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:221)
	br.com.caelum.vraptor.ioc.spring.VRaptorApplicationContext.getBean(VRaptorApplicationContext.java:244)
	br.com.caelum.vraptor.ioc.spring.SpringBasedContainer.instanceFor(SpringBasedContainer.java:59)
	br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
	br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56)
	br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:343)
	org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
	org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:177)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:188)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:149)
	org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
	org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)


root cause 

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'encodingHandlerFactory': Unsatisfied dependency expressed through constructor argument with index 0 of type [javax.servlet.ServletContext]: : No unique bean of type [javax.servlet.ServletContext] is defined: expected single matching bean but found 2: [javax.servlet.ServletContext, servletContext]; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [javax.servlet.ServletContext] is defined: expected single matching bean but found 2: [javax.servlet.ServletContext, servletContext]
	org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:698)
	org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:192)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:984)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:886)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:479)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
	org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:290)
	org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
	org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:287)
	org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
	org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:385)
	org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:375)
	org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1069)
	org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:221)
	br.com.caelum.vraptor.ioc.spring.VRaptorApplicationContext.getBean(VRaptorApplicationContext.java:244)
	br.com.caelum.vraptor.ioc.spring.SpringBasedContainer.instanceFor(SpringBasedContainer.java:59)
	br.com.caelum.vraptor.ioc.spring.ComponentFactoryBean.getObject(ComponentFactoryBean.java:42)
	org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:143)
	org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:109)
	org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1387)
	org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:244)
	org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
	org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:385)
	org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:375)
	org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1069)
	org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:221)
	br.com.caelum.vraptor.ioc.spring.VRaptorApplicationContext.getBean(VRaptorApplicationContext.java:244)
	br.com.caelum.vraptor.ioc.spring.SpringBasedContainer.instanceFor(SpringBasedContainer.java:59)
	br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
	br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56)
	br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:343)
	org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
	org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:177)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:188)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:149)
	org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
	org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)


root cause 

org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [javax.servlet.ServletContext] is defined: expected single matching bean but found 2: [javax.servlet.ServletContext, servletContext]
	org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:772)
	org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:680)
	org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:771)
	org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:691)
	org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:192)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:984)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:886)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:479)
	org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
	org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:290)
	org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
	org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:287)
	org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
	org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:385)
	org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:375)
	org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1069)
	org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:221)
	br.com.caelum.vraptor.ioc.spring.VRaptorApplicationContext.getBean(VRaptorApplicationContext.java:244)
	br.com.caelum.vraptor.ioc.spring.SpringBasedContainer.instanceFor(SpringBasedContainer.java:59)
	br.com.caelum.vraptor.ioc.spring.ComponentFactoryBean.getObject(ComponentFactoryBean.java:42)
	org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:143)
	org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:109)
	org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1387)
	org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:244)
	org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
	org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:385)
	org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:375)
	org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1069)
	org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:221)
	br.com.caelum.vraptor.ioc.spring.VRaptorApplicationContext.getBean(VRaptorApplicationContext.java:244)
	br.com.caelum.vraptor.ioc.spring.SpringBasedContainer.instanceFor(SpringBasedContainer.java:59)
	br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
	br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56)
	br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:343)
	org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
	org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:177)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:188)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:149)
	org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
	org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
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_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>BMWEB</display-name>
  <listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<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>
  <filter>
    <filter-name>vraptor</filter-name>
    <filter-class>br.com.caelum.vraptor.VRaptor</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>vraptor</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>REQUEST</dispatcher>
  </filter-mapping>
</web-app>
applicationContext.xml, deixei ele na raiz da pasta onde estão as classes Java
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:beans="http://www.springframework.org/schema/beans"
             xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd"
             >
	<http auto-config="true">
		<form-login login-page="/" authentication-failure-url="/?error=invalido" default-target-url="/admin"/>
		<intercept-url  pattern="/admin/**" access="ROLE_ADMIN" />
	</http>
	
	<authentication-manager>
		<authentication-provider>
		<password-encoder hash="plaintext" />
		<jdbc-user-service data-source-ref="dataSource"
			users-by-username-query="SELECT email as username, senha as password, 'true' as enable FROM usuario WHERE email = ?"
			authorities-by-username-query="SELECT u.email as username, r.nome as authority FROM usuario u, regra r WHERE u.regra_id = r.id AND email = ?"/>
		</authentication-provider>
	</authentication-manager>
	
	<beans:bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
		<beans:property name="url" value="jdbc:mysql://localhost/bmweb" />
		<beans:property name="driverClassName" value="com.mysql.jdbc.Driver" />
		<beans:property name="username" value="root" />
		<beans:property name="password" value="root" />
	</beans:bean>
</beans:beans>
Tá faltando alguma coisa no mu Web.xml??
Lucas_Cavalcanti

atualize o VRaptor pra 3.2.0, esse bug já foi corrigido…

juniorsatanas

To pegando o mesmo err o !

Lucas_Cavalcanti

está com a última versão do VRaptor?

juniorsatanas

NÃO ESTAVA;…

C
Então, atualizei e parece que agora vai, mas apareceu este erro ao tentar acessar a url de login:
br.com.caelum.vraptor.view.ResultException: org.apache.jasper.JasperException: /WEB-INF/jsp/login/index.jsp(20,8) The end tag "&lt;/c:if" is unbalanced
	br.com.caelum.vraptor.view.DefaultPageResult.forward(DefaultPageResult.java:69)
	br.com.caelum.vraptor.extra.ForwardToDefaultViewInterceptor.intercept(ForwardToDefaultViewInterceptor.java:59)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:75)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:69)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:44)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:81)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:70)
	br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
	br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56)
	br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:343)
	org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
	org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:177)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:188)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:149)
	org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
	org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
root cause

org.apache.jasper.JasperException: /WEB-INF/jsp/login/index.jsp(20,8) The end tag "&lt;/c:if" is unbalanced
	org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
	org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
	org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:132)
	org.apache.jasper.compiler.Parser.checkUnbalancedEndTag(Parser.java:1554)
	org.apache.jasper.compiler.Parser.parseElements(Parser.java:1419)
	org.apache.jasper.compiler.Parser.parseBody(Parser.java:1630)
	org.apache.jasper.compiler.Parser.parseOptionalBody(Parser.java:974)
	org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1242)
	org.apache.jasper.compiler.Parser.parseElements(Parser.java:1418)
	org.apache.jasper.compiler.Parser.parseBody(Parser.java:1630)
	org.apache.jasper.compiler.Parser.parseOptionalBody(Parser.java:974)
	org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1242)
	org.apache.jasper.compiler.Parser.parseElements(Parser.java:1418)
	org.apache.jasper.compiler.Parser.parse(Parser.java:130)
	org.apache.jasper.compiler.ParserController.doParse(ParserController.java:255)
	org.apache.jasper.compiler.ParserController.parse(ParserController.java:103)
	org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:185)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:347)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:327)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:314)
	org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:589)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	br.com.caelum.vraptor.core.DefaultStaticContentHandler.deferProcessingToContainer(DefaultStaticContentHandler.java:64)
	br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:80)
	br.com.caelum.vraptor.view.DefaultPageResult.forward(DefaultPageResult.java:67)
	br.com.caelum.vraptor.extra.ForwardToDefaultViewInterceptor.intercept(ForwardToDefaultViewInterceptor.java:59)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:75)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:69)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:44)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:81)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:53)
	br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:70)
	br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
	br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56)
	br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:343)
	org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
	org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:177)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:188)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79)
	org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
	org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:149)
	org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
	org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
O formulário tá assim:
<%-- 
    Document   : index
    Created on : 19/11/2010, 23:15:49
    Author     : cristiano
--%>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
         pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <c:if test="${param.error eq 'invalido'}">
            <c:out value="Usuário e/ou senha inválido(s)">
        </c:if>
<form name="f" action="<c:url value="/j_spring_security_check"/>" method="POST">
  <table>
    <tr>
        <td>
            <c:out value="Usuário:"/>
        </td>
        <td>
            <input type='text' name='j_username'/>
        </td>
    </tr>
    <tr>
        <td>
            <c:out value="Usuário:"/>
        </td>
        <td>
            <input type='password' name='j_password'>
        </td>
    </tr>
    <tr>
        <td colspan='2'>
            <input name="submit" type="submit">
        </td>
    </tr>
    <tr>
        <td colspan='2'>
            <input name="reset" type="reset">
        </td>
    </tr>
  </table>
</form>
    </body>
</html>
Inclusive o netbeans reclama na linha 20 do JSP, mas não vi nada de errado para ele reclamar. Alguém tem idéia?
Lucas_Cavalcanti
<c:out value="Usuário e/ou senha inválido(s)">

falta uma barra

<c:out value="Usuário e/ou senha inválido(s)"/>

qual é o motivo do <c:out>? ele não tá fazendo nada, além de deixar seu código maior :wink:

juniorsatanas

completo: http://www.4shared.com/file/l5gBmQTC/SIGI.html

juniorsatanas

Alguém ai que ta usando o Spring Security, fez algo relacionado a Usuário da seção ou usuário logado ? Não estou conseguindo pegar esse usuário e setar o ID dele no banco na hora de fazer um POST.

jr

adrian.gois

Kardok:
Guevara:
Olá kardok!
O Controle é assim mesmo, só colocar lá no seu aplicationContext.xml:

<intercept-url  pattern="/usuario/**" access="ROLE_ADMIN" />
		<intercept-url  pattern="/proprietario/**" access="ROLE_ADMIN" />
		<intercept-url  pattern="/imovel/**" access="ROLE_ADMIN" />

Ou vc pode restringir um método específico, por exemplo, a listagem de proprietários:

<intercept-url  pattern="/proprietario/lista" access="ROLE_ADMIN" />

O asterisco vc libera todos os métodos dentro do controller proprietário, ou posso restringir por cada método, no exemplo acima restringi o lista().
Têm outras dicas no manual do Spring:
http://static.springsource.org/spring-security/site/reference.html
Tô quase implementando o insert de um usuário admin caso não exista, assim ao subir a aplicação, terei um usuário pronto para logar. =)
Outra coisa legal, é implementar o controle de usuários logados, mostrá-los numa lista lá na jsp. Depois vou ver isso.
Abraço!

Então o que eu preciso é que essas intercep-url , fossem criadas a partir do meu Banco de dados.
uma tabela onde colocasse por exemplo duas colunas (pattern e access)
Caso queira mudar alguma configuraçao no acesso , seria feito somente no banco (tabela).

Cara… Vc conseguiu? Eu estou com o mesmo problema

Criado 3 de setembro de 2010
Ultima resposta 7 de nov. de 2011
Respostas 34
Participantes 10