龙空技术网

Ajax请求如何用Filter重定向

Java个人学习心得 1169

前言:

现时咱们对“ajaxget请求格式”大致比较注重,咱们都需要学习一些“ajaxget请求格式”的相关内容。那么小编同时在网上搜集了一些关于“ajaxget请求格式””的相关知识,希望各位老铁们能喜欢,朋友们快快来了解一下吧!

其实蛮简单的,网上资料也多,就是工作中遇到了,记录一下。

现在比较流行的开发方式,不管前端是APP、网页、小程序,后端是微服务、分布式,涉及到登录登出,用户信息方面,多是基于JWT的Token方式,后端根据业务情况使用Filter或者Interceptor,采用纯解密JWT或基于缓存(本地、Redis等)等方案来进行整个生命周期的管理。

这里过来的HTTP请求基本上都是Ajax请求。

不过在很多ToB项目、老系统中,基于Session的用户信息管理,HTTP请求中,页面、Ajax请求混杂。

我这两天就遇到了这个情况:

1、要用Filter针对几个请求做处理。

2、不符合要求的必须重定向到另一个服务提供的接口。

3、基本都是页面请求,唯有一个是Ajax请求。

页面请求的重定向比较简单,

response.sendRedirect(URL);

或者

request.getRequestDispatcher(URL).forward(request, response);

二者的区别就不再说了,很基础的知识。

我遇到的问题就是,这是一个Ajax请求,而重定向的URL是个页面,请求方必须跳转到那个页面进行后续操作。

这情况其实就很烦了,如果重定向的URL也是个接口,这事好办了,服务端直接HTTP请求过去,拿到结果返回给请求方就行了。

如果请求方是个普通的页面请求也方便了,重定向即可。

现在Ajax-服务端-重定向页面,这种局面,就需要前后端同时改造。

后端Filter:

import java.io.IOException;import java.util.Objects;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class DemoFilter implements Filter {    @Override    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)            throws IOException, ServletException {        HttpServletRequest req = (HttpServletRequest) request;        HttpServletResponse resp = (HttpServletResponse) response;        String url = req.getServletPath();        // TODO 排除不需要过滤的请求//        if (不需要过滤的请求) {//            chain.doFilter(request, response);//        }        // Ajax请求        if (Objects.nonNull(req.getHeader("X-Requested-With"))                && req.getHeader("X-Requested-With").equals("XMLHttpRequest")) {            // TODO 过滤逻辑            // 重定向            // 设置与前端约定好的状态            resp.setStatus(401);            // 设置与前端约定好的 是否跳转标识,0不跳转,1跳转            resp.setIntHeader("redirectFlag", 1);            resp.setHeader("redirectUrl", "重定向的URL");            resp.flushBuffer();        } else {            // TODO 非Ajax请求的处理        }    }}

前端就比较简单了,接收到响应后,根据status、redirectFlag、redirectUrl进行相应处理即可。

标签: #ajaxget请求格式