package com.ycsoft.business.commons.interceptor;
import java.lang.reflect.Method;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import org.springframework.aop.MethodBeforeAdvice;
import com.ycsoft.beans.system.SItemvalue;
import com.ycsoft.business.commons.abstracts.BaseService;
import com.ycsoft.business.commons.pojo.Parameter;
import com.ycsoft.business.component.system.IndexComponent;
import com.ycsoft.business.service.impl.OttExternalService;
import com.ycsoft.commons.constants.DictKey;
import com.ycsoft.commons.exception.ServicesException;
import com.ycsoft.commons.helper.StringHelper;
import com.ycsoft.commons.store.MemoryDict;
/**
* 使用拦截器设置过滤某些小区不能操作的业务.
* 仅拦截<code>Service</code>层的类。
*/
public class FilterBusiCodeInterceptor implements MethodBeforeAdvice {
private IndexComponent indexComponent;
/**
* 从<code>HttpServletRequest</code>中获取操作员的信息,
* 并注入到<code>Service</code>目标类中
*/
public void before(@SuppressWarnings("unused")
Method method, @SuppressWarnings("unused")
Object[] params, Object scope) throws Throwable {
if(!(scope instanceof BaseService)){
throw new Exception("该拦截器只适用于Service层...1");
}
if(scope instanceof OttExternalService ){
//接口不拦截
return ;
}
HttpServletRequest request = null;
try {
request = ServletActionContext.getRequest();
}catch (Exception e) {
}
if (request != null) {
//设置参数信息(web模式,在form提交时要求上传),
BaseService base = (BaseService)scope ;
Parameter param = (Parameter)base.getParam();
String busiCode = param.getBusiCode();
if(StringHelper.isEmpty(busiCode)){//ps.action 等不是业务请求的时候,直接返回
return;
}
String dept_id = base.getOptr().getDept_id();
String value = dept_id + "_" + busiCode;
SItemvalue dictItem = MemoryDict.getDictItem(DictKey.DEPT_BUSICODE, value);
if(dictItem != null){
String [] array = dictItem.getItem_name().split("_");
throw new ServicesException("当前部门 '" + array[0] +"' 无法进行 ['" + array[1] +"'] 业务!");
}
}
}
public void setIndexComponent(IndexComponent indexComponent) {
this.indexComponent = indexComponent;
}
}