前言
近期笔者在搭建springboot,为业务编写接口时,在搭建框架遇到了几个问题:
- 每一种url只能传递一类参数,如果接口复用传递其它参数,则需要解析
- 笔者将token隐藏在header中,从header中取出数据后的RequestParams,传递后台为Null,也就是说拦截器中处理过的RequestParams后,相当于单连接的Request直接消耗掉,后面无法使用。
为解决上述这两个问题,笔者查了大量资料,最后采用过滤器对请求进行类复制,实现了最终需求。
废话不多说,直接上代码,全手码,希望大家能给个好评,关注一下,点个赞~
代码实现
返回类
封装一个返回类
package top.powersys.utils.comm;
public class RespResult {
private Integer statuscode;
private String msg;
public RespResult(){
}
public RespResult(Integer statuscode,String msg){
this.statuscode = statuscode;
this.msg = msg;
}
public Integer getStatuscode() {
return statuscode;
}
public void setStatuscode(Integer statuscode) {
this.statuscode = statuscode;
}
public String getMsg(){
return msg; }
public void setMsg(String msg){
this.msg = msg;}
}
拦截器
package top.powersys.utils.requesthandler;
import com.alibaba.fastjson.JSONObject;
import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import top.powersys.core.util.GlobalUtil;
import top.powersys.prepayservice.service.LoginUserService;
import top.powersys.prepayservice.vo.LoginUser;
import top.powersys.utils.comm.RespResult;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
public class Interceptor extends HandlerInterceptorAdapter {
@Autowired
private LoginUserService loginUserService; //要依赖注入进来登录业务的实例
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if(request.getRequestURI().equals("/xxx/login")) //这里指定路径放开拦截
return true;
RespResult respResult = new RespResult();
request.setCharacterEncoding("utf-8");