Uma pasta a mais no vraptor para segurança das paginas no spring security tem problema?

Bem, deixa eu explicar isso direito, hoje minhas pastas no web-inf, se encontram assim:

jsp
  - admin
  - index
  - login
  - produto

e para cada um tenho o controller, ou seja so posso acessar /produto pq tenho o produtoController, até ai bacana, mais tem um probleminha.

no meu spring security o intercep está dessa maneira:

 <intercept-url pattern="/admin/**" access="ROLE_ADMINISTRADOR" />
 <intercept-url pattern="/index/**" access="ROLE_USUARIO" />
 <intercept-url pattern="/produto/**" access="ROLE_USUARIO" />
 <form-login login-page="/"
		    always-use-default-target="true" 
		    default-target-url="/index/index.jsp"
		    authentication-failure-url="/?login_error=invalido" />

só que, toda nova pasta terei que adicionar a intercept-url para a mesma, o que eu queria era:

deixar da seguinte forma:

jsp -
  - login
      -- login.jsp (onde será o path / da minha aplicação)
  - restritro
      -- produto
      -- index
      -- admin

de forma que agora só precisarei ter

 <intercept-url pattern="/restrito/admin/**" access="ROLE_ADMINISTRADOR" />
 <intercept-url pattern="/restrito/**" access="ROLE_USUARIO" />

é possivel com o vraptor?

Ola maaarkin, normalmente no VRaptor vc utiliza a Annotation @Interceptor e implementa a interface Interceptor em uma classe assim:

@Intercepts
public class Autorizacao implements Interceptor{
	private UsuarioWeb usuarioWeb;
	private UsuarioController usuarioController;
	private Result result;
	
	public Autorizacao(UsuarioWeb usuarioWeb, UsuarioController usuarioController, Result result) {
		this.usuarioWeb = usuarioWeb;
		this.usuarioController = usuarioController;
		this.result = result;
	}
	
	

	@Override
	public boolean accepts(ResourceMethod method) {
		return !method.containsAnnotation(Liberado.class);
	}

	@Override
	public void intercept(InterceptorStack stack, ResourceMethod method,
			Object resourceInstance) throws InterceptionException {
		if(this.usuarioWeb.isLogado()){
			stack.next(method, resourceInstance);
		}else{
			this.result.forwardTo("/nao_Autorizado.html");
		}
		
	}

}

No meu caso tudo que eu queria que ficasse liberado para qualquer usuario eu fiz uma annotation chamada “Liberado” e anotei os metodos do meu controler que eu queria que ficasse acessiveis para qualquer tipo de usuario.
Tem um documento da Caelum "FJ-28"que explica isso muito bem: http://www.caelum.com.br/curso-vraptor-hibernate/

os paths que vc vai colocar no spring security são os da URL e não os dos jsps.

na convenção do VRaptor os dois paths são parecidos, mas vc pode mudar colocando no controller:

@Resource
@Path("/restrito/bolinha")
public class BolinhaController {

    public void seuMetodo() {

    }
}

daí a url do método fica …/restrito/bolinha/meuMetodo

mas ai no caso, todos os meus controllers tenho que modificar para ficar

@Path("/restrito/produto")
public class ProdutoController

correto?

o que vc pode fazer pra facilitar é colocar tudo que é restrito dentro do pacote terminado em restrito e sobrescrever um componente do VRaptor pra sempre gerar os controllers com o nome do pacote.

como explicado aqui: http://vraptor.caelum.com.br/pt/docs/sobrescrevendo-as-convencoes-e-comportamento-do-vraptor/

supondo que os seus controllers estão no pacote br.com.suaempresa.controllers, vc faz:

package br.com.suaempresa.controllers.restrito;
@Resource
public class ProdutoController {..}
package br.com.suaempresa.controllers.restrito.admin;
@Resource
public class FinancasController {..}

daí vc cria a classe:

@Component
@ApplicationScoped
public class MeuRoutesParser extends PathAnnotationRoutesParser {
    //delegate constructor
    protected String extractControllerNameFrom(Class<?> type) {
        String prefixo = type.getPackage().getName().replaceFirst("br.com.suaempresa.controllers.?", "");

        return prefixo.replace(".", "/") + "/" + super.extractControllerNameFrom(type);
    }
}

algo assim deve funcionar.