package net.loyin.interceptor;
import java.util.List;
import net.loyin.StaticCfg;
import net.loyin.jFinal.anatation.PowerBind;
import net.loyin.memcache.MemcacheTool;
import com.jfinal.aop.Interceptor;
import com.jfinal.core.ActionInvocation;
import com.jfinal.core.Controller;
import com.jfinal.plugin.activerecord.Record;
/**
* 管理用户后台登录状态及权限验证拦截器
* @author 刘声凤
* 2012-9-6 下午8:32:53
*/
public class ManagerPowerInterceptor implements Interceptor {
@SuppressWarnings("unchecked")
public void intercept(ActionInvocation ai) {
Controller ctrl=ai.getController();
ctrl.setAttr("root","");
ctrl.setAttr("StaticCfg", new StaticCfg());
// Record po= (Record)ctrl.getSessionAttr("manager");
String sid=ctrl.getSession().getId();
Record po=(Record)MemcacheTool.mcc.get(sid);
if(po==null){
/*String ckey=ai.getControllerKey();
if(ckey.contains("webadmin")){
ctrl.redirect(ctrl.getRequest().getContextPath()+"/webadmin");
}else*/
ctrl.renderText("{\"statusCode\":301,\"message\":\"登录超时,请重新登录!\"}");
}else{
boolean v=true;
String code=null;
PowerBind p=ai.getController().getClass().getAnnotation(PowerBind.class);
if(p!=null){
v=p.v();
code=p.code();
}
p=ai.getMethod().getAnnotation(PowerBind.class);
if(p!=null){
v=p.v();
code=p.code();
}
boolean f=false;
if(v==true){
/**菜单权限判断*/
List<Record> menus=(List<Record>)MemcacheTool.mcc.get("menu"+sid);
if(menus!=null&&menus.isEmpty()==false){
if(checkPower(menus,ai.getActionKey(),code)){//链接或安全码匹配
ctrl.setAttr("powersafecodelist",MemcacheTool.mcc.get("powersafecodelist"+sid));
ai.invoke();//注意 一定要执行此方法
}else{
f=true;
}
}else{
f=true;
}
}else{
ai.invoke();//注意 一定要执行此方法
}
if(f)
ctrl.renderText("{\"statusCode\":300,\"message\":\"<font color='red'><B>您未有此操作权限!请勿越权操作!<br>请重新登录获得最新权限设置!</B></font>\"}");
}
}
private boolean checkPower(List<Record> menus,String url,String safecode){
for(Record m:menus){
String u=m.getStr("url");
String mcode=m.getStr("safecode");
if((u!=null&&url.contains(u))||(mcode!=null&&mcode.equals(safecode))){
return true;
}
}
return false;
}
}