package com.fgkj.Filters; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import com.fgkj.actions.ActionUtil; import com.fgkj.actions.CustompageAction; import com.fgkj.dto.Custompage; import com.fgkj.dto.User_inf; import com.fgkj.dto.User_permitgroup; import com.google.gson.reflect.TypeToken; /** * 防止用户非法盗链 * @author 军 * */ public class HotlinkFilter extends ActionUtil implements Filter{ //定义一个联系导航和权限的数组 String[][] temp={ //数据管理内有查询功能的页面 {"batttest_data_query_permit","11"}, //电池充放电数据管理 {"batttest_data_edit_permit","12"}, //上传fbo/idc数据 {"batttest_data_edit_permit","13"}, //上传内阻/电导数据 {"batttest_data_query_permit","14"}, //数据统计查询报表 {"battinf_report_query_permit","19"}, //电池信息统计查询 {"battgroup_report_query_permit","20"}, //电池组统计分析查询 {"monomer_report_query_permit","21"}, //电池单体统计分析查询 {"battlarm_report_query_permit","21"}, //电池单体统计分析查询 //作业管理内有查询功能的页面 {"task_query_permit","33"}, //作业管理 {"task_query_permit","34"}, //作业参数 {"task_query_permit","35"}, //节假日管理 {"task_query_permit","36"}, //作业模板管理 {"task_query_permit","37"}, //作业变更查询 {"task_query_permit","38"}, //作业报表 {"task_query_permit","39"}, //动环C接口状态 {"task_query_permit","40"}, //短信设备状态 {"task_query_permit","42"}, //作业抽查管理 //用户和包机组管理权限 {"usr_query_permit","44"}, //用户管理 {"usr_query_permit","46"}, //包机组管理 {"permit_query_permit","45"}, //权限管理 //服务器参数设置权限 {"server_param_query_permit","49"}, //参数设置 //电池告警管理权限 {"batt_alm_query_permit","27"}, //电池告警实时查询 {"batt_alm_query_permit","28"}, //电池告警历史查询 //设备告警管理权限 {"dev_alm_query_permit","29"}, //设备告警实时查询 {"dev_alm_query_permit","30"}, //设备告警历史查询 //电池故障管理权限 {"battfault_query_permit","24"}, //电池故障维护查询 {"battfault_query_permit","25"}, //电池故障维护统计报表 //作业抽查任务管理权限 {"usr_taskcheck_query_permit","42"}, //作业抽查管理 //作业变更管理权限 {"taskchange_query_permit","37"}, //作业变更查询 {"batt_test_op_permit","58"}, //电池放电测试 {"batt_test_op_permit","81"}, //批量电池放电测试 //超级管理员界面 {"batt_discharge_model_permit","59"}, //设备充放电模块参数 {"batt_discharge_model_permit","63"}, //电池组信息配置 {"batt_discharge_model_permit","68"}, //线程监控管理 {"batt_discharge_model_permit","64"}, //用户密码重置 {"batt_discharge_model_permit","65"}, //班组管理 {"batt_discharge_model_permit","71"}, //电池组配组管理 {"batt_discharge_model_permit","82"}, //基站安装审批 {"batt_discharge_model_permit","83"}, //BTS设备升级 {"batt_alm_param_query_permit","31"}, //告警参数设置 {"batt_alm_param_query_permit","66"}, //设备告警参数设置 }; public void destroy() { } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { //System.out.println("。。。。。。"); HttpServletRequest request=(HttpServletRequest)req; String URL=request.getRequestURI(); String[] uri=request.getRequestURI().split("/"); String source=uri[uri.length-1]; //System.out.println("***"+source+"***"); boolean flag=false; if("login.jsp".equalsIgnoreCase(source) || "navConfig.jsp".equalsIgnoreCase(source) || "pwdChange.jsp".equalsIgnoreCase(source) || "fuguang".equals(source) || "index.jsp".equals(source)){ flag=true; if("login.jsp".equalsIgnoreCase(source)){ //进入登录页面的时候查询导航数组并且将其存入session //new CustompageAction().searchAll(); } }else{ List custompages = (List) ActionUtil.getSession().getAttribute("custompages"); //System.out.println(custompages); Custompage cust = getCustompage(source,custompages); if(cust==null){ flag=true; //System.out.println("......"+source+"......"); }else{ String permitName=getPermitName(cust.getNum(),temp); if(permitName.equalsIgnoreCase("")){ if(cust.getSubflag()==1){ flag=true; } }else{ List permits=ActionUtil.getGson("yyyy-MM-dd HH:mm:ss").fromJson(ActionUtil.getSession().getAttribute("permits").toString(), new TypeToken>(){}.getType()); //System.out.println(permitName); //System.out.println(permits); User_permitgroup permit=getPermitByName(permitName, permits); //System.out.println(cust); if(permit!=null && permit.getPermit_item_value()==1 && cust.getSubflag()==1){ flag=true; } } Custompage t=getMainMenu(cust, custompages); if(t!=null && t.getSubflag()==0){ flag=false; } } } //System.out.println(source+"---->"+flag); if(flag){ chain.doFilter(req, resp); }else{ PrintWriter out=ActionUtil.getOut(); out.print(""); } } public void init(FilterConfig arg0) throws ServletException { } //判断当前用户是否有(permit)该权限 public static boolean getAlow(List permits,User_permitgroup permit){ boolean flag=false; for (int i = 0; i < permits.size(); i++) { if(permits.get(i).getPermit_item_name().equalsIgnoreCase(permit.getPermit_item_name())){ flag=true; break; } } return flag; } //根据权限的名字获取权限对象 public static User_permitgroup getPermitByName(String name,List permits){ for(int i=0;i Custs){ for(int i=0;Custs!=null && i Custs){ if(cust!=null){ for(int i=0;i