SpringMVC 拦截器HandlerInterceptorAdapter


<!-- 测试公共校验拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/crm/**"/>
<mvc:exclude-mapping path="*/crm/resource/download,*/crm/home/homeInit"/>
<bean class="com.test.interceptor.DemoInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>




import java.io.PrintWriter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import com.alibaba.fastjson.JSONObject;
import com.test.exception.DemoValidateException;
import com.test.common.PublicResponse;
import com.test.bean.UserInfo;
import com.test.service.CrmService;
/**
* 测试公共校验拦截器
*/
public class DemoInterceptor extends HandlerInterceptorAdapter {
private static final Log logger = LogFactory.getLog(DemoInterceptor.class);
@Autowired
private CrmService crmService;
/**
* 在业务处理器处理请求之前被调用
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
PrintWriter out=null;
String logStr="DemoInterceptor.preHandle...";
logger.info(logStr+"拦截器preHandle方法");
try{
UserInfo userInfo=crmService.validateMethod(request);
logger.info(logStr+String.format("拦截校验通过:token=%s, servletPath=%s, uri=%s, url=%s", request.getHeader("TOKEN_KEY_NAME_DEMO"),request.getServletPath(),request.getRequestURI(),request.getRequestURL()));
/*
打印结果:
token=CEEADEC1C6591A84E08DCE54136608BC3,
servletPath=, //取不到
uri=/crm/stu/init,
url=http://192.168.12.100:9898/crm/stu/init
*/
request.setAttribute("CRM_REQUEST_USERINFO_DEMO", userInfo);
return true;
}catch(DemoValidateException e){
logger.error(logStr+"公共校验异常");
PublicResponse rsp=new PublicResponse();
rsp.setRspCode(e.getCode());
rsp.setRspMsg(e.getMessage());
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
out = response.getWriter();
out.print(JSONObject.toJSONString(rsp));
logger.info(logStr+String.format("拦截校验未通过:token=%s, rsp=%s", request.getHeader("TOKEN_KEY_NAME_DEMO"),JSONObject.toJSONString(rsp)));
out.flush();
}finally {
if(null!=out){
out.close();
}
}
return false;
}

/**
* 在业务处理器处理请求完成之后,生成视图之前执行
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
String logStr="DemoInterceptor.postHandle...";
logger.info(logStr+"拦截器postHandle方法");
super.postHandle(request, response, handler, modelAndView);
}
/**
* 在DispatcherServlet完全处理完请求之后被调用,可用于清理资源
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
super.afterCompletion(request, response, handler, ex);
}
/**
* 处理异步请求(当Controller中有异步请求方法的时候会触发该方法)
*/
@Override
public void afterConcurrentHandlingStarted(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
super.afterConcurrentHandlingStarted(request, response, handler);
}

}



@RequestMapping(value = "/stu/init", method = RequestMethod.GET)
@ResponseBody
public PublicResponse testControllerMethod(final HttpServletRequest request, final HttpServletResponse response){
PublicResponse rsp=new PublicResponse();
//add code here
try{
//从拦截器过来的request中获取UserInfo
UserInfo stu=(UserInfo)request.getAttribute("CRM_REQUEST_USERINFO_DEMO");
logger.info(logStr+"测试stu="+stu.toString());
}catch(Exception e){
e.printStackTrace();
logger.error("接口异常");
}
logger.info("接口响应rsp="+rsp.toString());
return rsp;
}


参考博客:
-- SpringMvc中使用Interceptor与Filter的注意点
[url]https://www.cnblogs.com/FlyHeLanMan/p/6640941.html[/url]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值