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
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]
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);
}
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.