Como impedir entrar em página jsf digitando no browser

3 respostas
L

Caros amigos da GUJ… estou começando no desenvolvimento em JSF e estou implementando um sistema usando JSF 1.2, RichFaces, Mysql, TomCat. Já tenho algumas funcionalidades prontas, mas queria a ajuda de alguém para resolver uma coisa que deve ser básica, mas ñ tenho conhecimento de como se faz.

Como eu poderia fazer com quem ninguém pudese acessar nenhuma página de conteúdo sem realizar o devido login na aplicação? se alguém puder me ajudar, fico grato.

3 Respostas

tnaires

Você pode escrever um PhaseListener ou um filtro para fazer isso. No Google tem bastante material sobre isso.

Aqui tem um exemplo de filtro:
http://www.developer.com/security/article.php/3467801/Securing-J2EE-Applications-with-a-Servlet-Filter.htm

tnaires
Segue o código de um filtro de exemplo. Ele não deixa o usuário acessar as páginas situadas dentro do diretório "restrito" se não estiver logado na sessão. Além disso, se o usuário tentar acessar a página de login já estando logado, ele é redirecionado para a página principal. Para o filtro, o usuário está logado se existir um atributo de escopo de sessão com o nome "usuario".
public class LoginFilter implements Filter {
	public void init(FilterConfig filterConfig)
		throws ServletException {
		
	}

	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
		throws IOException, ServletException {
		
		HttpServletRequest httpRequest = (HttpServletRequest) request;
		HttpSession session = httpRequest.getSession(false);
		String uri = httpRequest.getRequestURI();
		String redirect = null;
		
		// Se a sessão for nula, ou se não houver usuário na sessão...
		if (session == null || session.getAttribute("usuario") == null) {
			// Se o usuário estiver tentando acessar alguma página dentro do diretório restrito...
			if (uri.contains("/restrito")) {
				// ... redirecione-o para a página de login.
				redirect = "/Contexto/login.xhtml";
			}
		} else if (uri.endsWith("login.xhtml")) {
			redirect = "/Contexto/restrito/principal.xhtml";
		}
		
		if (redirect != null) {
			((HttpServletResponse) response).sendRedirect(redirect);
		} else {
			chain.doFilter(request, response);
		}
	}

	public void destroy() {
		
	}
}
L

como a apicação não tão grande e pesada vou utilizar essa solução com filtro que vejo como mais simples e prática de utilizar… obrigado pelo esclarecimento.

Criado 9 de julho de 2010
Ultima resposta 10 de jul. de 2010
Respostas 3
Participantes 2