JSF 2 e JAAS

6 respostas
D

Estava implementando um login e fui usar a autenticação do tipo FORM.

Estou usando JSF2 + facelets e não consigo achar nenhum exemplo de como fazer um form com a tag <h:from> e as outras tags JSF, tive que infelizmente colocar <f:verbatin> e por html dentro funciona mais queria ter que escrever html na mão, alguém sabe como fazer o formulário só utilizando as tags do JSF

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
        <title>Login</title>
    </h:head>
    <h:body>
        <f:verbatim>
            <form method="post" action="#{request.contextPath}/j_security_check">
                <label for="username">Userid</label><input type="text" id="username" name="j_username"/>
                <label for="password">Password</label><input type="password" id="password" name="j_password"/>
                <input type="submit" value="Login"/>
            </form>
        </f:verbatim>
    </h:body>
</html>

6 Respostas

D

Isso ñ é possível. O máximo q vc pode fazer é um componente JSF custom p/ construir a form de login p/ vc.

D

auhauha alguém mais concorda que deveria existir um componente que suportasse esse recurso, estranho ultimamente estou vendo varias lacunas não preenchidas.

so por curiosidade sabe o motivo de não ser possível?

Obrigado novamente brother

D

Os componentes do JSF usam binding dos seus valores com propriedade de algum ManagedBean. No caso do form de login do JAAS vc ñ tem o ManagedBean responsável pelo login e por isso vc usar parametros nomeados j_username e j_password. O mesmo vale p/ a action q é definida pela url j_security_check enquanto uma action do JSF é uma expressão q aponta p/ um método de um ManagedBean.
Vc pode usar o JSF p/ fácilitar a criação e customização da form de login, msm pq as vezes vc ñ quer ou simplesmente ñ pode usar JAAS. O JSF 2 torna isso muito fácil através de Composite Componentes.

D

Entedi estava lendo hoje sobre os composite components vlw novamente.

M

Meu login é igual ao do Diabo Loiro!
Só estou tendo problemas com meu web.xml, aqui:

<login-config>
	<auth-method>FORM</auth-method>		
	<form-login-config>
		<form-login-page>/login.xhtml</form-login-page>
		<form-error-page>/negado.xhtml</form-error-page>
	</form-login-config>
</login-config>

Onde o Eclipse fica informando login.jsp e negado.jsp não existem.
Na verdade eles existem, mas com a extensão .xhtml .
O meu faces servlet é assim:

<servlet-mapping>
	<servlet-name>Faces Servlet</servlet-name>
	<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

Vocês tem o mesmo problema?

A

utilizo jaas + jsf + primefaces..

<h:form>
		        
		     	<p:growl id="avisos" showDetail="true" life="3000" />
	        	<p:messages id="mensagens" for="login" showDetail="true" autoUpdate="true" globalOnly="true"/>
		        
		        <h:inputHidden id="id" value="#{userMB.from}" />
        
		    	<p:focus for="email" />
		    	<p:fieldset legend="Login">
		    		<h:panelGrid columns="3" cellpadding="5">
		                
		            	<h:outputText value="E-mail: " />
		 				<p:inputText id="email" value="#{userMB.user.email}" required="true" label="Login"/>  
				        <p:message for="email" />  
				            
				     	<h:outputText value="Senha: " />
		 				<p:password id="password"  value="#{userMB.user.password}" required="true" label="Password"/>  
				   		<p:message for="password" />  
				            
		                
		            </h:panelGrid>
			</p:fieldset>
		        	
		    <p:commandButton value="Entrar" icon="ui-icon-disk" action="#{userMB.login}" update="avisos,mensagens" ajax="false" />
		        
		</h:form>

E o managed bean:

package com.mb;
 
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//import javax.security.auth.login.FailedLoginException;

import com.facade.UserFacade;
import com.model.User;
 
@SessionScoped
@ManagedBean
public class UserMB {
    private User user;
 
    @EJB
    private UserFacade userFacade;
    
    private static final String INDEX = "index";  
    
    private static final String STAY_IN_THE_SAME_PAGE = null;  
    
    @PostConstruct
    public void init(){  
        user = new User();  
    }  
    
    public User getUser(){
        if(user == null || user.getEmail() == null){
            ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();
            if (context.getUserPrincipal() != null){
            	String userEmail = context.getUserPrincipal().getName();
 
            	user = userFacade.findUserByEmail(userEmail);
            }
        }
 
        return user;
    }
    
    public void setUser(User usuario) {  
        this.user = usuario;  
    }  
 
    public boolean isUserAdmin(){
        return getRequest().isUserInRole("ADMIN");
    }
    
    public boolean isUserLoggedIn(){
		
        if (getContext().getExternalContext().getUserPrincipal() != null)
			return true;
		
		return false;
    	
    }
 
    public String logOut(){
        //getRequest().getSession().invalidate();
    	try {
			getRequest().logout();
			
		} catch (ServletException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	
        user = new User();
        return "logout";
    }
 
    private HttpServletRequest getRequest() {
        return (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
    }
    
      
    public String login(){ 
    	
    	
    	try {
    		
    		if (getContext().getExternalContext().getUserPrincipal() == null)
    			getRequest().login(user.getEmail(), user.getPassword());
    		
			return INDEX; 

		} catch (ServletException e) {
			
				sendErrorMessageToUser("login", "Não foi possível se logar.", "Verifique seu usuário e senha.");
			
			return STAY_IN_THE_SAME_PAGE;  
		} 
    	
    }  
    
    private void sendInfoMessageToUser(String title, String message){
        FacesContext context = getContext();
        context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, title, message));
    }
    
    private void sendInfoMessageToUser(String messageBox, String title, String message){
        FacesContext context = getContext();
        context.addMessage(messageBox, new FacesMessage(FacesMessage.SEVERITY_INFO, title, message));
    }
 
    private void sendErrorMessageToUser(String title, String message){
        FacesContext context = getContext();
        context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, title, message));
    }
    
    private void sendErrorMessageToUser(String messageBox, String title, String message){
        FacesContext context = getContext();
        context.addMessage(messageBox, new FacesMessage(FacesMessage.SEVERITY_ERROR, title, message));
    }
 
    private FacesContext getContext() {
        FacesContext context = FacesContext.getCurrentInstance();
        return context;
    }


}
Criado 12 de novembro de 2010
Ultima resposta 9 de ago. de 2012
Respostas 6
Participantes 4