Non dovete utilizzare la classe Hibernate che mappa la tabella sul DB. Dovete utilizzare un oggetto che rappresenta l'utente loggato e salvarlo in sessione. Quello che chiedete può essere fatto nel modo seguente:
Pagina login.jsp:
Codice PHP:
<%@ page contentType="text/html"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<f:view>
<html>
<head><title>JSF Simple Login Example</title></head>
<body>
<h:form>
<table>
<tr>
<td><h:outputText value = "Username: " /></td>
<td><h:inputText id="loginname" value="#{SimpleLogin.loginname}" /></td>
</tr>
<tr>
<td><h:outputText value = "Password: " /></td>
<td><h:inputSecret id= "password" value="#{SimpleLogin.password}" /></td>
</tr>
<tr>
<td></td>
<td><h:commandButton value = "Login" action="#{SimpleLogin.CheckValidUser}" /></td>
</tr>
</table>
</h:form>
</body>
</html>
</f:view>
dove SimpleLogin è la classe che utilizzate per verificare la correttezza del login. Ad esempio:
Codice PHP:
import java.util.Map;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
public class SimpleLogin{
String loginname;
String password;
public SimpleLogin(){}
public String getLoginname(){
return loginname;
}
public void setLoginname(String loginname){
this.loginname = loginname;
}
public String getPassword(){
return password;
}
public void setPassword(String password){
this.password = password;
}
public String CheckValidUser(){
boolean loginOK=false;
/**
* Verifichi sul DB l'esistenza dell'username, cambiando quindi lo stato della variabile loginOK. Qui puoi usare le classi hibernate che ti servono
*/
if(loginOK){
LoggedUser loggedUser = new LoggedUser();
loggedUser.setUsername(loginname);
//salvo l'oggetto in sessione
FacesContext ctx = FacesContext.getCurrentInstance();
ExternalContext ectx = ctx.getExternalContext();
Map<String,Object> m = ectx.getSessionMap();
m.put("LoggedUserInSession",loggedUser);
return "success";
}
else{
return "fail";
}
}
}
Se la login è corretta, crei un oggetto LoggedUser che contiene i dati dell'utente appena loggato. Settati i valori metti questo oggetto in sessione, in modo da poterlo recuperare ovunque ti serva. La classe LoggedUser sarà una cosa del genere:
Codice PHP:
public class LoggedUser {
private String username;
/** Creates a new instance of LoggedUser */
public LoggedUser() {
}
/**
* @return the username
*/
public String getUsername() {
return username;
}
/**
* @param username the username to set
*/
public void setUsername(String username) {
this.username = username;
}
}
A questo punto non resta che creare la pagina che viene visualizzata in caso di corretto login:
Pagina welcome.jsp
Codice PHP:
<%@ page contentType="text/html"%>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<f:view>
<html>
<head><title>JSF Simple Login Example</title></head>
<body>
<h:form>
<table>
<tr>
<td><h:outputText value ="Benvenuto, #{sessionScope.LoggedUserInSession.username}" /></td>
</tr>
</table>
</h:form>
</body>
</html>
</f:view>
Questo è il file faces-config.xml:
Codice PHP:
<?xml version='1.0' encoding='UTF-8'?>
<faces-config version="1.2"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee [url]http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd[/url]">
<managed-bean>
<managed-bean-name>SimpleLogin</managed-bean-name>
<managed-bean-class>SimpleLogin</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<navigation-rule>
<from-view-id>/login.jsp</from-view-id>
<navigation-case>
<from-action>#{SimpleLogin.CheckValidUser}</from-action>
<from-outcome>success</from-outcome>
<to-view-id>/welcome.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-action>#{SimpleLogin.CheckValidUser}</from-action>
<from-outcome>fail</from-outcome>
<to-view-id>/login.jsp</to-view-id>
</navigation-case>
</navigation-rule>
</faces-config>
Buon divertimento