Segurança no WEB.XML usando VRAPTOR2

Estou usando o Vraptor2 pela primeira vez em meu projeto, e não estou sabendo como configurar o web.xml para que algum espertinho não consiga acessar páginas internas da minha aplicação via URL no browser como por exemplo

http://localhost:8080/minhaApp/usuario.lista.logic

ou ainda

http://localhost:8080/minhaApp/usuario/lista.ok.jsp

Tentei alguns bloqueios como podem ver no meu web.xml abaixo, porem não to tendo muito sucesso, pois dessa forma, ele esta bloqueando todas as requisições feitas via action pelo vraptor2.

Alguem sabe me ajudar ?

Obrigado.

[code]<?xml version="1.0" encoding="UTF-8"?>



30



core/inicio.ok.jsp

        <servlet>
            <servlet-name>vraptor2</servlet-name>
            <servlet-class>org.vraptor.VRaptorServlet</servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>

        <servlet-mapping>
            <servlet-name>vraptor2</servlet-name>
            <url-pattern>*.logic</url-pattern>
        </servlet-mapping>
        
<error-page>
    <error-code>404</error-code>
    <location>/core/erro404.jsp</location>
</error-page>
<error-page>
    <error-code>403</error-code>
    <location>/core/erro403.jsp</location>
</error-page>
<security-constraint>
            <display-name>
                Previnindo acesso direto a paginas JSP
            </display-name>
            <web-resource-collection>
                <web-resource-name>Raw-JSP-Pages</web-resource-name>
                <!-- Adicione o caminho para cada arquivo .jsp  -->
                <url-pattern>/usuario.lista.logic</url-pattern>
                <url-pattern>/usuario.formulario.logic</url-pattern>
                <url-pattern>/usuario/*</url-pattern>
                <url-pattern>/core/*</url-pattern>
                
            </web-resource-collection>
            <auth-constraint>
                <description>Acesso proibido aos JSP's</description>
            </auth-constraint>
            </security-constraint>
</web-app>[/code]

Coloca os JSPs dentro do WEB-INF

O Vraptor pede que os jsp sejam separados por diretorios correspondentes a sua classe ClasseLogic, entao tem que ser separado assim mesmo

Ninguem ??

Meu caro, eu uso o vraptor, e você pode colocar o JSP onde você quiser. Basta usar o views.properties e divertir-se. Leia melhor sobre isso na documentação.

eu uso o VRaptor e solucionei o problema usando interceptor, verifico que para acessar num metodo do logic o usuario esteja na session, que foi o caso de seu exemplo http://localhost:8080/minhaApp/usuario.lista.logic
um exemplo de logic:

@Component("usuario")
@InterceptedBy({DaoInterceptor.class, AutorizadorInterceptor.class})
public class UsuarioLogic {

um exemplo de autorizador:

public class AutorizadorInterceptor implements Interceptor {
	@In(scope = ScopeType.SESSION, required = false)
	private Usuario usuarioSession;
	public void intercept(LogicFlow flow) throws LogicException, ViewException {
		HttpServletResponse response = flow.getLogicRequest().getResponse();
		
		try {
			// verifica se o usuario esta logado ( se esta na sessão)
			if (this.usuarioSession == null) {
				// usuario não esta logado
				response.sendRedirect("admin.logout.logic);
			} else {
				// usuario esta logado na session
				// executa o logic
				flow.execute();
			}
		} catch (Exception e) {
			throw new LogicException(e);
		}

Agora se o um usuario qualquer não logado, quiser entrar diretamente em um jsp tipo http://localhost:8080/minhaApp/usuario/lista.ok.jsp , ali não vai ter nenhum dado para listar , a pagina estará vazia.

Espero que ajude.

Olá, uma boa opção para resolver o problema de acesso indevido seria a utilização de um Filter. Por exemplo, vamos supor que você faça a autenticação do seu usuário por meio de algum mecanismo de login, então você coloca um atributo na sessão do usuário que identifique ele, seu método doFilter poderia ser algo assim.


	public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
			throws IOException, ServletException {

		HttpServletRequest request = (HttpServletRequest) servletRequest;
		HttpServletResponse response = (HttpServletResponse) servletResponse;
		String resource = request.getServletPath();
		if ((request.getSession().getAttribute("user") != null) || resource.endsWith("/Login.action")) {
			filterChain.doFilter(request, response);
		} else if (this.isPublicResource(request)) {
			filterChain.doFilter(request, response);
		} else {
			response.sendRedirect(request.getContextPath() + "/index.jsp");
		}
	}

Espero que ajude.

[]'s