当项目使用SpringMvc时拦截器的注意事项

用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 {
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值