下面市springboot中定义的一个拦截器
package cn.com.doone.sc.tx.cloud.dyb.system.handle;
import cn.com.doone.sc.tx.cloud.dyb.system.bean.po.member.MemberPo; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.net.URLEncoder;
/**
@Auther: liufei
@Date: 2020/7/1 10:55
@Description: */ @Component public class AuthActionInterceptor implements HandlerInterceptor {
@Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println(“开始拦截1…1”); MemberPo memberPo = UserContext.getUser(); if(memberPo==null){ String mString = URLEncoder.encode(“请先登录”, “utf-8”); /* String target = URLEncoder.encode(request.getRequestURL().toString(), “uft-8”);*/ returnJson(response,"{“code”:400,“msg”:“请登录!”}"); return false; }else{ return true; } }
/**
后处理回调方法,实现处理器(controller)的后处理,但在渲染视图之前此时我们可以通过modelAndView对模型数据进行处理或对视图进行处理 */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { // TODO Auto-generated method stub} /**
整个请求处理完毕回调方法,即在视图渲染完毕时回调,如性能监控中我们可以在此记录结束时间并输出消耗时间,还可以进行一些资源清理,类似于try-catch-finally中的finally,但仅调用处理器执行链中 */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { // TODO Auto-generated method stub }/返回客户端数据/ private void returnJson(HttpServletResponse response, String json) throws Exception{ PrintWriter writer = null; response.setCharacterEncoding(“UTF-8”); response.setContentType(“text/html; charset=utf-8”); try { writer = response.getWriter(); writer.print(json);
} catch (IOException e) { } finally { if (writer != null){ writer.close();} }}
}