What you could do is create a JSF Project at least with the following libraries
jsf-api.jar
jsf-impl.jar
jstl-api-1.2.jar
jstl-impl-1.2.jar
Note: Am using JSF 2 libraries.
For session management, you need to create a bean with a Session Scope. In our case we can create a bean called LoginBean. UserBean will have an EventListener called verifyIfUserLoggedIn. This is event will be attached to any pages which you would to restrict access using <f:event > tag.(To avoid adding the <f:event /> tag to all the pages you want to restrict access, you can include it in the template). Below is the code
LoginBean.java
import java.io.IOException;
import java.io.Serializable;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ComponentSystemEvent;
@ManagedBean
@SessionScoped
public class LoginBean implements Serializable {
private static final long serialVersionUID = 1L;
private String username;
private String password;
private boolean isLoggedIn;
public String login(){
//custom member manager class
MemberManager memberManager=new MemberManager();
//default url in case of login failure;
String url="login.jsf";
//user a custom method to authenticate a user
if(memberManager.authenticate(username, password)){
//changed the state to true
isLoggedIn=true;
url="forum.jsf";
}else{
//set the message to display when authentication fails
FacesContext.getCurrentInstance().addMessage("frmLogin:btnLogin", new FacesMessage("Invalid Username and or Password"));
}
return url;
}
/**
* An event listener for redirecting the user to login page if he/she is not currently logged in
* @param event
*/
public void verifyUseLogin(ComponentSystemEvent event){
if(!isLoggedIn){
doRedirect("login.jsf");
}
}
/**
* Method for redirecting a request
* @param url
*/
private void doRedirect(String url){
try {
FacesContext context=FacesContext.getCurrentInstance();
context.getExternalContext().redirect("login.jsf");
} catch (IOException e) {
e.printStackTrace();
}
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public boolean isLoggedIn() {
return isLoggedIn;
}
public void setLoggedIn(boolean isLoggedIn) {
this.isLoggedIn = isLoggedIn;
}
}
Login Form
Login page will have a structure the following code
<h:form id="frmLogin">
<h:message for="btnLogin" />
<h:panelgrid columns="2">
<h:outputtext value="Username" /><h:inputtext value="#{loginBean.username}" style="width: 106px;" />
<h:outputtext value="Password" /><h:inputsecret value="#{loginBean.password}" style="width: 108px;" />
<h:outputtext value="" /><h:commandbutton action="#{loginBean.login}" value="Login" id="btnLogin" />
</h:panelgrid>
</h:form>
Attach Event Listener
Attach event listener to the page or view you want to restrict access as shown below (preferably in the head section).
<f:metadata>
<f:event listener="#{loginBean.verifyUseLogin}" type="preRenderView">
</f:event>
I hope this article will be of help. Regards