Galera, estou com uma dúvida sobre como autenticar um usuário no meu sistema inteiro. Eu criei uma classe para fazer o login, que pesquisa as informações no banco utilizando JPA (TopLink).
A dúvida: como chamar essa classe antes de qualquer coisa sem ter que colocar uma chamada dela em todas as classes do meu sistema?
Após o login ser feito pela primeira vez, as informações do usuário vão estar em session, e eu queria verificar se essas informações ainda são válidas antes de fazer qualquer coisa.
Defina a classe SecurityFilter como exemplificado abaixo.
publicclassSecurityFilterimplementsFilter{// A página de loginprivatestaticfinalStringLOGIN_PAGE_URI="/faces/sistema/login.jspx";// Objeto para registro de LOGprivateLoglogger=LogFactory.getLog(this.getClass());// Um conjunto de recursos restritosprivateSetrestrictedResources;/** * Inicializa Filtro. */publicvoidinit(FilterConfigfilterConfig)throwsServletException{// Adicione nesse conjunto as páginas que deverão ser acessadas após login.this.restrictedResources=newHashSet();this.restrictedResources.add("/faces/sistema/login.jspx");this.restrictedResources.add("/faces/sistema/home.jspx");this.restrictedResources.add("/faces/sistema/cliente.jspx");}/** * Objeto Padrão doFilter. */publicvoiddoFilter(ServletRequestreq,ServletResponseres,FilterChainchain)throwsIOException,ServletException{this.logger.debug("doFilter");StringcontextPath=((HttpServletRequest)req).getContextPath();StringrequestURI=((HttpServletRequest)req).getRequestURI();if(requestURI.contains(LOGIN_PAGE_URI)&&this.authorize((HttpServletRequest)req)){logger.debug("Usuário já foi autorizado.");((HttpServletRequest)req).getRequestDispatcher(HOME_PAGE_URI).forward(req,res);}elseif(this.contains(requestURI,contextPath)&&!this.authorize((HttpServletRequest)req)){logger.debug("Falha na autorização");((HttpServletRequest)req).getRequestDispatcher(LOGIN_PAGE_URI).forward(req,res);}else{logger.debug("Autorização bem sucedida");chain.doFilter(req,res);}}publicvoiddestroy(){}privatebooleancontains(Stringvalue,StringcontextPath){Iteratorite=this.restrictedResources.iterator();while(ite.hasNext()){StringrestrictedResource=(String)ite.next();if((contextPath+restrictedResource).contains(value)){returntrue;}}returnfalse;}privatebooleanauthorize(HttpServletRequestreq){LoginBeanacesso=(LoginBean)req.getSession().getAttribute("LoginBean");if(acesso!=null&&acesso.getLoggedIn()){returntrue;}else{returnfalse;}}}