Login JSF

8 respostas
T

Oi pessoal,

estou tentado rodar um exemplo de login que peguei, mas não tive sucesso. :(
Do jeito que tá aparece a tela de login toda hora. A cada botão/link que eu clico está pedindo pra que eu efetue o login.

web.xml
<filter>
    <filter-name>HibernateSessionFilter</filter-name>
    <filter-class>br.com.sis.filter.HibernateSessionFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>HibernateSessionFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  
 
  <filter>
    <display-name>AuthFilter</display-name>
    <filter-name>AuthFilter</filter-name>
    <filter-class>br.com.sis.filter.AuthFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>AuthFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
Filtro
public class AuthFilter implements Filter {

    /**
     * Default constructor. 
     */
    public AuthFilter() {
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see Filter#destroy()
	 */
	public void destroy() {
		// TODO Auto-generated method stub
	}

	/**
	 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
	 */
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		boolean auth = request.getAttribute("user") != null;
		HttpServletRequest rq = (HttpServletRequest) request;
		HttpServletResponse rp = (HttpServletResponse) response;
		
		if(!auth && !rq.getRequestURL().toString().contains("login.faces")){
			rp.sendRedirect("login.faces");
		}else{
			try {
				chain.doFilter(request, response);
			} catch (Exception e) {
				System.out.println("Problema no chain.doFilter");
				e.printStackTrace();
			}
		}
	}

	/**
	 * @see Filter#init(FilterConfig)
	 */
	public void init(FilterConfig fConfig) throws ServletException {
		// TODO Auto-generated method stub
	}
}
MB
public String doLogin(){
		if(userDao.isValidLoginAndPassword(login, senha)){
			FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("user", "ok");
			
			System.out.println("Login e Senha corretos!");
			 	
			return "loginSucesso"; 
		}else{
			System.out.println("Entrou no else: reloadError");
			return "goLogin";
		}
	}

Ele loga no sistema e me enchaminha pra página principal, que é o que quero. Mas se eu clico em alguma opção, aparece o login novamente.
Outra coisa estranha é que o CSS não funciona quando eu registro o filtro no web.xml.

Saída no console:

Mudando login para: admin
Login e Senha corretos!
Problema no chain.doFilter
javax.servlet.ServletException: org.ajax4jsf.resource.ResourceNotFoundException: Resource not registered : org/richfaces/renderkit/html/scripts/
at org.ajax4jsf.resource.InternetResourceService.serviceResource(InternetResourceService.java:154)
at org.ajax4jsf.resource.InternetResourceService.serviceResource(InternetResourceService.java:141)
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:510)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at br.com.sis.filter.AuthFilter.doFilter(AuthFilter.java:44)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at br.com.sis.filter.HibernateSessionFilter.doFilter(HibernateSessionFilter.java:22)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
Caused by: org.ajax4jsf.resource.ResourceNotFoundException: Resource not registered : org/richfaces/renderkit/html/scripts/
at org.ajax4jsf.resource.ResourceBuilderImpl.getResource(ResourceBuilderImpl.java:397)
at org.ajax4jsf.resource.ResourceBuilderImpl.getResourceForKey(ResourceBuilderImpl.java:341)
at org.ajax4jsf.resource.InternetResourceService.serviceResource(InternetResourceService.java:152)
... 20 more

Alguém já passou por isso?

8 Respostas

G

no jsf … se vc n tiver uma “action” ou um retorno mapeado para uma determinada ação, ele automaticamente da um reload na pagina…

por exemplo

<h:commandLink action="teste"/>

se meu action teste … n estiver na regra de navegação … ele vai dar um reload na mesma pagina em q foi chamado …

D

Vc tá dando um set no session e tentando pegar do request...

Além disso request não vai manter informações de estado...

Ps: Bonita foto heim!!!

tati.mat.moreira:
Oi pessoal,

estou tentado rodar um exemplo de login que peguei, mas não tive sucesso. :(
Do jeito que tá aparece a tela de login toda hora. A cada botão/link que eu clico está pedindo pra que eu efetue o login.

web.xml
<filter>
    <filter-name>HibernateSessionFilter</filter-name>
    <filter-class>br.com.sis.filter.HibernateSessionFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>HibernateSessionFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  
 
  <filter>
    <display-name>AuthFilter</display-name>
    <filter-name>AuthFilter</filter-name>
    <filter-class>br.com.sis.filter.AuthFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>AuthFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
Filtro
public class AuthFilter implements Filter {

    /**
     * Default constructor. 
     */
    public AuthFilter() {
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see Filter#destroy()
	 */
	public void destroy() {
		// TODO Auto-generated method stub
	}

	/**
	 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
	 */
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		boolean auth = request.getAttribute("user") != null;
		HttpServletRequest rq = (HttpServletRequest) request;
		HttpServletResponse rp = (HttpServletResponse) response;
		
		if(!auth && !rq.getRequestURL().toString().contains("login.faces")){
			rp.sendRedirect("login.faces");
		}else{
			try {
				chain.doFilter(request, response);
			} catch (Exception e) {
				System.out.println("Problema no chain.doFilter");
				e.printStackTrace();
			}
		}
	}

	/**
	 * @see Filter#init(FilterConfig)
	 */
	public void init(FilterConfig fConfig) throws ServletException {
		// TODO Auto-generated method stub
	}
}
MB
public String doLogin(){
		if(userDao.isValidLoginAndPassword(login, senha)){
			FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("user", "ok");
			
			System.out.println("Login e Senha corretos!");
			 	
			return "loginSucesso"; 
		}else{
			System.out.println("Entrou no else: reloadError");
			return "goLogin";
		}
	}

Ele loga no sistema e me enchaminha pra página principal, que é o que quero. Mas se eu clico em alguma opção, aparece o login novamente.
Outra coisa estranha é que o CSS não funciona quando eu registro o filtro no web.xml.

Saída no console:

Mudando login para: admin
Login e Senha corretos!
Problema no chain.doFilter
javax.servlet.ServletException: org.ajax4jsf.resource.ResourceNotFoundException: Resource not registered : org/richfaces/renderkit/html/scripts/
at org.ajax4jsf.resource.InternetResourceService.serviceResource(InternetResourceService.java:154)
at org.ajax4jsf.resource.InternetResourceService.serviceResource(InternetResourceService.java:141)
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:510)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at br.com.sis.filter.AuthFilter.doFilter(AuthFilter.java:44)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at br.com.sis.filter.HibernateSessionFilter.doFilter(HibernateSessionFilter.java:22)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
Caused by: org.ajax4jsf.resource.ResourceNotFoundException: Resource not registered : org/richfaces/renderkit/html/scripts/
at org.ajax4jsf.resource.ResourceBuilderImpl.getResource(ResourceBuilderImpl.java:397)
at org.ajax4jsf.resource.ResourceBuilderImpl.getResourceForKey(ResourceBuilderImpl.java:341)
at org.ajax4jsf.resource.InternetResourceService.serviceResource(InternetResourceService.java:152)
... 20 more

Alguém já passou por isso?

T

Tá... mas o que eu tenho que fazer?

Esqueci de colocar a tela de login:
<h:form>
	<fieldset>
        <legend>Login</legend>
		<h:panelGrid columns="2">
					<h:outputText id="loginLabel" value="Login" styleClass="rotulos" />
					<h:inputText id="login" value="#{userFace.login}" required="true" styleClass="edit" />
					
					<h:outputText id="loginInput" value="Senha" styleClass="rotulos" />
					<h:inputSecret id="senha" required="true" value="#{userFace.senha}"	styleClass="edit" />
					<h:commandButton id="botao" value="Entrar" action="#{userFace.doLogin}" />
					<h:message for="login" />
					<h:message for="senha" />
		</h:panelGrid>
	
		</fieldset>
	</h:form>
G

Vc tá dando um set no session e tentando pegar do request…

Além disso request não vai manter informações de estado…

como foi dito …

se vc da um set no session … vc tem q pegar no session tb …

se vc usar o request … o usuario n vai fikar em sessao … e a tela d login vai continuar aparecendo …
pq o escopo d request é menor q o d session …

D
tati.mat.moreira:
Tá... mas o que eu tenho que fazer? Esqueci de colocar a tela de login:
<h:form>
	<fieldset>
        <legend>Login</legend>
		<h:panelGrid columns="2">
					<h:outputText id="loginLabel" value="Login" styleClass="rotulos" />
					<h:inputText id="login" value="#{userFace.login}" required="true" styleClass="edit" />
					
					<h:outputText id="loginInput" value="Senha" styleClass="rotulos" />
					<h:inputSecret id="senha" required="true" value="#{userFace.senha}"	styleClass="edit" />
					<h:commandButton id="botao" value="Entrar" action="#{userFace.doLogin}" />
					<h:message for="login" />
					<h:message for="senha" />
		</h:panelGrid>
	
		</fieldset>
	</h:form>

Então, vc tem que não orientar set para o request e sim para o session!!!

T

Ficou na mesma, pode ajudar?

S

trocar o seu request.getAttribute(“user”) por

HttpSession session = request.getSession(); session.getAttribute("user");

o Set Também

T

Oie,

modifiquei, mas agora o sistema não está pedindo login.

Filtro:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		HttpServletRequest rq = (HttpServletRequest) request;
		HttpServletResponse rp = (HttpServletResponse) response;
		
		boolean auth = rq.getSession().getAttribute("user") != null;

		if (!auth && !rq.getRequestURL().toString().contains("")) {
			rp.sendRedirect("http://localhost:8080/sis/login.faces");
		} else {

			try {
				chain.doFilter(request, response);
			} catch (Exception e) {
				System.out.println("Problema no chain.doFilter");
				e.printStackTrace();
			}
		}
	}
MB:
public String doLogin() throws Exception{
        boolean logado = false;
        
        HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
        HttpServletResponse rp = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
       
        logado = userDao.isValidLoginAndPassword(login, senha);

        if(logado){
            session.setAttribute("user", logado);
            rp.sendRedirect("http://localhost:8080/sis/index.faces");
            return "loginSucesso";
        }else{
            session.setAttribute("user", null);
            session.removeAttribute("user");
            rp.sendRedirect("http://localhost:8080/sis/login.faces");
            return "goLogin";
        }
    }
Erro:
javax.naming.NamingException: Name is not valid at org.apache.naming.NamingContext.bind(NamingContext.java:836) at org.apache.naming.NamingContext.rebind(NamingContext.java:208) at org.apache.naming.SelectorContext.rebind(SelectorContext.java:192) at javax.naming.InitialContext.rebind(Unknown Source) at org.hibernate.util.NamingHelper.bind(NamingHelper.java:97) at org.hibernate.impl.SessionFactoryObjectFactory.addInstance(SessionFactoryObjectFactory.java:113) at org.hibernate.impl.SessionFactoryImpl.(SessionFactoryImpl.java:338) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1327) at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867) at br.com.sis.dao.HibernateUtil.(HibernateUtil.java:17) at br.com.sis.filter.HibernateSessionFilter.doFilter(HibernateSessionFilter.java:19) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Unknown Source) Problema no chain.doFilter org.apache.jasper.JasperException: java.lang.RuntimeException: FacesContext not found at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:522) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:416) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at br.com.sis.filter.AuthFilter.doFilter(AuthFilter.java:27) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at br.com.sis.filter.HibernateSessionFilter.doFilter(HibernateSessionFilter.java:22) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Unknown Source) Caused by: java.lang.RuntimeException: FacesContext not found at javax.faces.webapp.UIComponentClassicTagBase.getFacesContext(UIComponentClassicTagBase.java:241) at javax.faces.webapp.UIComponentClassicTagBase.getPreviousJspIdsSet(UIComponentClassicTagBase.java:1229) at javax.faces.webapp.UIComponentClassicTagBase.checkIfItIsInAnIterator(UIComponentClassicTagBase.java:1214) at javax.faces.webapp.UIComponentClassicTagBase.setJspId(UIComponentClassicTagBase.java:168) at org.apache.jsp.login_jsp._jspx_meth_f_005fview_005f0(login_jsp.java:118) at org.apache.jsp.login_jsp._jspService(login_jsp.java:93) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374) ... 21 more
Criado 3 de fevereiro de 2009
Ultima resposta 5 de fev. de 2009
Respostas 8
Participantes 4