用SpringMvc很久了但最近遇到一个问题 我写了写了一个拦截器内容如下
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.dubbo.controller.json.util.JsonResponse;
import com.enterprise.evaluation.controller.html.ShareController;
/**
* 栏架用户登录拦截器
*
* @author Administrator
*/
public class CheckUserLoginAjaxFilter extends ShareController implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain chain)
throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) arg1;
HttpServletRequest request = (HttpServletRequest) arg0;
String token = request.getParameter("token"), userId = request.getParameter("userId");
JsonResponse json = new JsonResponse();
用javaWeb拦截器获取参数不是文件上传的Controller就可以获取到,如果是文件上传一个参数都获取不到,因该是SpringMvc导致的Controller类容如下
@RequestMapping("/updateOrAdd/json")
@ResponseBody
public String updateOrAdd(String resultId, String softText, String identity, String imgLink,
@RequestParam(value = "file", required = false) MultipartFile file, HttpServletRequest request) {
后来用了SpringMvc的拦截器参数就可以获取到了
package com.enterprise.evaluation.fliter;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import com.dubbo.common.enums.CodeEnum;
import com.dubbo.controller.json.util.BaseJSON;
import com.dubbo.controller.json.util.JsonResponse;
import com.dubbo.controller.json.util.JsonUtil;
import com.enterprise.evaluation.controller.api.ShareController;
/**
* @author 刘兴
*/
public class CheckUserLoginAjaxFilterInterceptor extends HandlerInterceptorAdapter {
/*
* 利用正则映射到需要拦截的路径
*/
/**
* 在业务处理器处理请求之前被调用 如果返回false 从当前的拦截器往回执行所有拦截器的afterCompletion(),再退出拦截器链
* 如果返回true 执行下一个拦截器,直到所有的拦截器都执行完毕 再执行被拦截的Controller 然后进入拦截器链,
* 从最后一个拦截器往回执行所有的postHandle() 接着再从最后一个拦截器往回执行所有的afterCompletion()
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
String path = request.getServletPath();
if (path.endsWith("/json")) {
String token = request.getParameter("token"), userId = request.getParameter("userId");
JsonResponse json = new JsonResponse();
String jsonData;
if (StringUtils.isEmpty(token) || StringUtils.isEmpty(userId)) {
PrintWriter out = response.getWriter();
out.append(json.toJsonD(CodeEnum.paramInvalidate, "用户令牌或主键为空"));
out.close();
return false;
} else {
jsonData = ShareController.tokenJson(request, userId, token, json);
}
BaseJSON baseJSON = JsonUtil.jsonIsSuccess(jsonData);
if (baseJSON.isSuccess()) {
return true;
} else {
PrintWriter out = response.getWriter();
out.append(jsonData);
out.close();
return false;
}
} else {
return true;
}
}
/**
* 在业务处理器处理请求执行完成后,生成视图之前执行的动作 可在modelAndView中加入数据,比如当前时间
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
}
/**
* 在DispatcherServlet完全处理完请求后被调用,可用于清理资源等
*
* 当有拦截器抛出异常时,会从当前拦截器往回执行所有的拦截器的afterCompletion()
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
}
}