PhaseListener
; JSF lifecycle ını dinleyen bir listenerdır.Bu class içerisinde
ki beforePhase sayfa render edilmeden önce , afterPhase sayfa
render edildikten sonra çalışır.
PhaseListener
a JSF in Interceptor larıda diyebiliriz.
Yetkilendirme
, loglama vs gibi işlemler burada yapılır.Aşağıda ki kodlarda
logout olmuş bir kullanıcının , login olupta görmesi gereken bir
sayfayı görüntülemeye çalışmasının PhaseListener kodları
yazılıdır.Burada eğer kullanıcı logout olmuşsa , herhangi bir
sayfaya gitmeğe çalıştığı zaman , kullanıcının index.xhtml
sayfasına redirect edilmesi lazımdır.
Lafı
fazla uzatmadan kodlama kısmına geçelim.
AuthorizationPhaseListener.java
public
class
AuthorizationPhaseListener implements
PhaseListener {
private
static
final
long
serialVersionUID
= 1L;
Logger
logger
= Logger.getLogger(AuthorizationPhaseListener.class);
@EJB
GeneralFacade
service;
@Override
public
void
afterPhase(PhaseEvent event) {
logger.debug("afterPhase()
Evresine geçildi..");
FacesContext
facesContext = event.getFacesContext();
String
currentPage = facesContext.getViewRoot().getViewId();
int
isLoginPage = currentPage.lastIndexOf("index.xhtml");
HttpSession
session = (HttpSession) facesContext.getExternalContext()
.getSession(true);
Object
currentUser = session.getAttribute("kullaniciadi");
if
(isLoginPage != 1) {
if
(currentUser == null)
{
ExternalContext
ec = facesContext.getExternalContext();
try
{
ec.redirect(ec.getRequestContextPath()
+ "/faces/index.xhtml");
}
catch
(IOException ex) {
logger.error(ex);
}
}
}
}
@Override
public
void
beforePhase(PhaseEvent arg0) {
}
@Override
public
PhaseId getPhaseId() {
logger.debug("getPhaseId()
Evresinde");
return
PhaseId.RESTORE_VIEW;
}
}
Uygulamanın
bu classı sürekli dinlemesi için faces-config.xml dosyasına
aşağıda ki satırları eklememiz gerekiyor.
<lifecycle>
<phase-listener>com.mesutemre.phases.AuthorizationPhaseListener</phaselistener>
</lifecycle>
Hiç yorum yok:
Yorum Gönder