1、我们项目中会经常使用带springmvc 的拦截器来校验当前请求的前置规则,比如是不是有访问权限,参数合法等。
2、拦截器说明:
我的项目是自定义类继承
org.springframework.web.servlet.handler.HandlerInterceptorAdapter,然后实现其中的三个前置、后置和最后渲染的拦截方法。主要业务一般写在
preHandle(request,response,object);方法中,比如参数校验。
3、为了解决拦截失败返回参数的一致性,我们需要返回自己的回调信息
package com.cloudstore.v4.interceptor;
import com.alibaba.fastjson.JSONObject;
import com.cloudstore.init.entity.initMember;
import com.cloudstore.init.service.initMemberService;
import com.cloudstore.v4.entity.TAuthMember;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
public class AuthHandler extends HandlerInterceptorAdapter {
@Autowired
private initMemberService memberService;
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
String ecId = httpServletRequest.getParameter("ecId");
if(StringUtils.isEmpty(ecId)){
writeFailure(httpServletResponse);
return false;
}
return true;
}
private void writeFailure(HttpServletResponse response) throws IOException {
JSONObject result = new JSONObject();
result.put("code",0);
result.put("errMsg","对不起,你没有权限!");
response.setCharacterEncoding("UTF-8");
PrintWriter writer = response.getWriter();
writer.write(result.toString());
writer.flush();
writer.close();
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
}
}
以上是一个简单的参数校验。如果不为空就放过,否则,就返回{code:0,errMsg:'你没有权限'}这样的数据格式。和我们api的返回格式一样