5 Nisan 2015 Pazar

JSF PhaseListener Kullanımı


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>