/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.zople.filter;
import com.zople.login.bean.LoginUserSession;
import com.zople.login.bean.UserSessionBean;
import com.zople.util.EnSystemConfig;
import javax.faces.application.Application;
import javax.faces.application.NavigationHandler;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*@描 述: JSF拦截器
*@ author: yuzhi2217@yuxia2217@163.com
*@version: 1.0
*/
public class ActionFilter implements PhaseListener {
final Logger logger = LoggerFactory.getLogger(ActionFilter.class); //日志管理
public ActionFilter(){
}
@Override
public void afterPhase(PhaseEvent event) {
PhaseId phaseId = event.getPhaseId();
// System.out.println("phaseId: " + phaseId);
// System.out.println("输出拦截=========2");
//
//生命周期
if (phaseId == PhaseId.RESTORE_VIEW ) {
//|| phaseId == PhaseId.INVOKE_APPLICATION) {
FacesContext currentContext = FacesContext.getCurrentInstance();
String viewId= currentContext.getViewRoot().getViewId();
// System.out.println("dddddddddddddd==="+viewId);
//ViewId 就是我们需要的路径,类似URL,如/noPermission.xhtml
if(null!=viewId&&viewId.contains(EnSystemConfig.EN_ADMIN_URL)){
String isEnabled = "false";
isEnabled=loggedIn(viewId);
if(isEnabled.equals("NoPurview")){
// 没有权限
// logger.info("NoPurview");
gotoNoPermissionPage();
}else if(isEnabled.equals("false")){
//没有登录
// logger.info("没有登录");
gotoNoSessionPage();
}
}
// System.out.println("afterPhase: " + viewId);
// System.out.println("phaseId: " + phaseId);
// System.out.println("PhaseId.RESTORE_VIEW==="+ PhaseId.RESTORE_VIEW);
// System.out.println("PhaseId.INVOKE_APPLICATION=="+PhaseId.INVOKE_APPLICATION);
}
}
/*没有Session**/
private void gotoNoSessionPage() {
FacesContext currentContext = FacesContext.getCurrentInstance();
NavigationHandler nh = currentContext.getApplication().getNavigationHandler();
nh.handleNavigation(currentContext, null, "logout");
}
/* 没权限 */
private void gotoNoPermissionPage() {
FacesContext currentContext = FacesContext.getCurrentInstance();
NavigationHandler nh = currentContext.getApplication().getNavigationHandler();
nh.handleNavigation(currentContext, null, "noPurview");
}
@Override
public void beforePhase(PhaseEvent event) {
// System.out.println("输出拦截===========1");
}
@Override
public PhaseId getPhaseId() {
return PhaseId.ANY_PHASE;
}
//验证是否已经登陆
private String loggedIn(String url) {
UserSessionBean userSessionBean = LoginUserSession.getInstance().getSessionBean(EnSystemConfig.EN_USER_SESSION);
if(null!=userSessionBean&&null!=userSessionBean.getUserId()){
// System.out.println("输出SessionName========sdfsdfsd==f========="+url);
if(null!=userSessionBean.getMemberLevels()){
if(!userSessionBean.getMemberLevels().getIsBuy()&&url.contains(EnSystemConfig.EN_IS_BUY_URL)){
return "NoPurview";
}
if(!userSessionBean.getMemberLevels().getIsMerchants()&&url.contains(EnSystemConfig.EN_IS_MERCHANTS)){
return "NoPurview";
}
if(!userSessionBean.getMemberLevels().getIsMachining()&&url.contains(EnSystemConfig.EN_IS_MACHINING)){
return "NoPurview";
}
}
return "true";
}
return "false";
}
}
配置文件
faces-config.xml
<lifecycle>
<phase-listener>com.zople.filter.ActionFilter</phase-listener>
</lifecycle>
<navigation-rule>
<from-view-id>*</from-view-id>
<navigation-case>
<from-outcome>logout</from-outcome>
<to-view-id>/pages/member/login_out.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>noPurview</from-outcome>
<to-view-id>/pages/error/purview.xhtml</to-view-id>
</navigation-case>
</navigation-rule>