session expire / ACL controll phaselistener


package listener;

import java.io.IOException;
import java.util.List;

import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;
import javax.servlet.http.HttpSession;

import com.ibm.commons.util.StringUtil;
import com.ibm.designer.runtime.directory.DirectoryUser;
import com.ibm.xsp.designer.context.ServletXSPContext;
import com.ibm.xsp.designer.context.XSPUrl;

import util.JSFUtil;

/**
 * perform ACL control - session expire control
 * 
 * @author weihang.chen
 */
public class StarterListener implements PhaseListener {

	private static final long serialVersionUID = -3758380512345263872L;

	public void afterPhase(PhaseEvent arg0) {

	}

	public void beforePhase(PhaseEvent arg0) {
		// SESSION EXPIRE CONTROLL
		FacesContext context = arg0.getFacesContext();
		ExternalContext ext = context.getExternalContext();
		HttpSession session = (HttpSession) ext.getSession(false);
		boolean newSession = (session == null) || (session.isNew());
		boolean postback = !ext.getRequestParameterMap().isEmpty();
		boolean timedout = postback && newSession;

		Object localObject1 = JSFUtil.getVariableValue("context");
		String currenturl = "";
		if (localObject1 instanceof ServletXSPContext) {
			currenturl = ((ServletXSPContext) localObject1).getUrl()
					.toString();
		}
		if (timedout) {
			if (StringUtil.isNotEmpty(currenturl))
				try {
					ext.redirect(currenturl);
				} catch (IOException e) {
					e.printStackTrace();
				}
		}

		// ACL CONTROLL
		// if (arg0.getPhaseId() == PhaseId.RENDER_RESPONSE
		// || arg0.getPhaseId() == PhaseId.RESTORE_VIEW) {
		// Object localObject1;
		// Object localObject2;
		// localObject1 = JSFUtil.getVariableValue("context");
		// if (localObject1 instanceof ServletXSPContext) {
		// String requestPage = FacesContext.getCurrentInstance()
		// .getViewRoot().getViewId();
		// if (StringUtil.equals(requestPage, WELCOMEPAGE))
		// return;
		// localObject2 = ((ServletXSPContext) localObject1).getUser();
		// if (localObject2 instanceof DirectoryUser) {
		// List<?> roles = ((DirectoryUser) localObject2).getRoles();
		// if (roles.isEmpty())
		// ((ServletXSPContext) localObject1)
		// .redirectToPage(WELCOMEPAGE);
		// for (Object o : roles) {
		// if (!StringUtil.equals(o.toString(), ROLEADMIN)) {
		// ((ServletXSPContext) localObject1)
		// .redirectToPage(WELCOMEPAGE);
		// }
		// }
		// }
		// }
		// }
	}

	public PhaseId getPhaseId() {
		// TODO Auto-generated method stub
		return PhaseId.RENDER_RESPONSE;
	}

}



<!-- phaselistener needs to be added to faces-config.xml-->
<lifecycle>
    <phase-listener>listener.StarterListener</phase-listener>
</lifecycle>
All code submitted to OpenNTF XSnippets, whether submitted as a "Snippet" or in the body of a Comment, is provided under the Apache License Version 2.0. See Terms of Use for full details.
No comments yetLogin first to comment...