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.SOptr;
import com.ycsoft.business.commons.abstracts.BaseService;
import com.ycsoft.business.commons.pojo.Parameter;
import com.ycsoft.business.service.impl.OttExternalService;
import com.ycsoft.commons.constants.Environment;
import com.ycsoft.commons.helper.JsonHelper;
import com.ycsoft.commons.store.MemoryDict;
/**
* 使用拦截器设置 <code>Parameter</code> 等信息,
* 仅拦截<code>Service</code>层的类。
*
* @author hh
* @date Jan 4, 2010 4:09:49 PM
*/
public class SetterParameterInterceptor implements MethodBeforeAdvice {
/**
* 从<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层...2");
}
if(scope instanceof OttExternalService ){
//接口不拦截
return ;
}
try{
HttpServletRequest request = ServletActionContext.getRequest();
if (request != null) {
//设置参数信息(web模式,在form提交时要求上传),
BaseService base = (BaseService)scope ;
Object o = request.getAttribute( Environment.BUSIPARAM_INTERCEPT_KEY );
Parameter param = (Parameter) o;
if( null == o)
param = new Parameter();
//从session中获取操作员信息
Object optr = request.getSession().getAttribute(Environment.USER_IN_SESSION_NAME);
if(optr == null)
throw new Exception("操作员信息无法获取,系统错误");
//debug(getClass(), base.toString()+"设置Service操作员:" + optr.toString());
param.setOptr(JsonHelper.toObject( optr.toString(), SOptr.class));
if(param.getPay() != null){
request.getSession().setAttribute(Environment.CURRENT_BUSI_OPTR_ID,param.getPay().getBusi_optr_id());
}
Object langObj = request.getSession().getAttribute(Environment.USER_IN_SESSION_LANG);
if(langObj != null && !langObj.toString().equals(MemoryDict.getLang())){
MemoryDict.setLang(langObj.toString());
}
base.setParam(param);
}
}catch (Exception e) {
// TODO: handle exception
}
}
}