Olá pessoal do forum blz…
Sou novo com JSF e gostaria de saber como vcs controlam as autorizações dos usuários, ou seja,
como vc permitem ou não o acesso as páginas do sistema com JSF…???
Será q vcs teriam algum exemplo para seguir ???
Obrigado a todos.
Gbzao
Junho 23, 2008, 1:22pm
#2
Uma maneira bem simples seria com a utilização de filters.
Dê uma olhada nesse material:
http://www.devmedia.com.br/articles/viewcomp.asp?comp=5331
Criar um servlet é a maneira mais fácil disso:
public class LoginFilter implements Filter {
/**
* Logger em questão
*/
private static final Logger logger = Logger.getLogger(LoginFilter.class);
/**
* Identificador do Filtro
*/
private final static String FILTER_APPLIED = "_security_filter_applied";
/**
* Construtor padrão
*/
public LoginFilter() {
}
/**
* Método implementado do Filter
*/
public void init(FilterConfig arg0) throws ServletException {
}
/**
* Método implementado do Filter
*/
public void destroy() {
}
/**
* Responsável por validar e verificar se o usuario está logado
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest hreq = (HttpServletRequest) request;
HttpServletResponse hresp = (HttpServletResponse) response;
HttpSession session = hreq.getSession();
String paginaAtual = new String(hreq.getRequestURL());
logger.info("Pagina em questao: " + paginaAtual);
if ((request.getAttribute(FILTER_APPLIED) == null) && paginaAtual != null
&& (!paginaAtual.endsWith("login.jsf") && !paginaAtual.endsWith("cadastroEmpresa.jsf") && !paginaAtual.endsWith("recuperarSenha.jsf") && !paginaAtual.endsWith("loginEnviadoEmail.jsf") && !paginaAtual.contains("_classes.xcss") && !paginaAtual.contains("/script") && !paginaAtual.endsWith("cadastroEfetuado.jsf"))
&& (paginaAtual.endsWith(".jsf"))) {
request.setAttribute(FILTER_APPLIED, Boolean.TRUE);
String user = null;
LoginBean login = null;
OperadorBean operador = null;
logger.info("Procurando usuario");
if (((br.com.teste.jsf.bean.login.Login) session.getAttribute("login")) != null) {
login = ((br.com.teste.jsf.bean.login.Login)session.getAttribute("login")).getLoginBean();
operador = ((br.com.teste.jsf.bean.login.Login)session.getAttribute("login")).getOperadorBean();
}
logger.info("Usuario encontrado: " + user);
if((operador.getUsuario() == null && operador.getSenha() == null || operador.getUsuario().equals("") && operador.getSenha().equals("")) && (login.getUsuario() == null && login.getSenha() == null || login.getUsuario().equals("") && login.getSenha().equals(""))){
if(paginaAtual.contains("administracao")){
logger.info("Redirecionando para a página de login da Administracao");
hresp.sendRedirect("/Teste/administracao/login/login.jsf");
} else {
logger.info("Redirecionando para a página de login do Portal empresas");
hresp.sendRedirect("/Teste/portal/login/login.jsf");
}
return;
}
if(login.getUsuario() != null && (login.getSenha() == null || login.getSenha().equals(""))){
hresp.sendRedirect("/Teste/portal/login/login.jsf");
return;
}
}
chain.doFilter(request, response);
}
}
web.xml
<filter>
<filter-name>Login Filter</filter-name>
<filter-class>br.com.teste.filtros.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Login Filter</filter-name>
<url-pattern>*.jsf</url-pattern>
</filter-mapping>
Falow pessoal muito obrigado pelas dicas, vou tentar implementar aqui…
Obrigado mesmo !!
royopa
Junho 23, 2008, 7:19pm
#5
Eu implementei isso num projeto que estou trabalhando e ficou ótimo.
Aprendi bastante usando Servlet Filter, dá uma pesquisada!
Abraço!
bobmoe
Junho 24, 2008, 9:46am
#7
você pode abstrair bastante se usar o próprio JSF pra fazer isso através do PhaseListener