一、创建自定义Filter
默认加载Filter
characterEncodingFilter
hiddenHttpMethodFilter
httpPutFormContentFilter
requestContextFilter
自定义Filter
@WebFilter(filterName = "lodinFiler",urlPatterns = {"/login/*"})
public class LodinFiler implements Filter {
Gson gson = new Gson();
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)servletRequest;
HttpServletResponse res = (HttpServletResponse)servletResponse;
String token = req.getHeader("token");
if(token!=null && !"".equals(token)){
filterChain.doFilter(servletRequest,servletResponse);
}else{
writer(res,500,"token不合法");
return;
}
}
@Override
public void destroy() {
}
/**
* 响应信息
*/
private void writer(HttpServletResponse rep, int statusCode,String msg) {
rep.setCharacterEncoding("UTF-8");
rep.setContentType("application/json");
rep.setDateHeader("Expires", 0);
PrintWriter out = null;
try {
Map<String,Object> map = new HashMap<>();
map.put("status",statusCode);
map.put("msg",msg);
String json =gson.toJson(map);
out = rep.getWriter();
out.println(json);
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
第一:必须实现Filter接口
第二:必须加@WebFilter (Servlet3.0特性)
第三:url的指定,前面必须有“/”,否则报错
二、创建Servlet (模拟验证码)
@WebServlet(urlPatterns = {"/code"})
public class LoginServlet extends HttpServlet {
Gson gson = new Gson();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setCharacterEncoding("UTF-8");
resp.setContentType("application/json");
resp.setDateHeader("Expires", 0);
PrintWriter out = null;
try {
Map<String,Object> map = new HashMap<>();
map.put("status",0);
map.put("msg","获取验证码成功");
map.put("data","1Wer");
String json =gson.toJson(map);
out = resp.getWriter();
out.println(json);
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req,resp);
}
}
总结
有2点需要注意:
filter必须写@WebFilter;
servlet必须写@WebServlet
启动类必须写 @ServletComponentScan