您的位置 首页 java

Ajax请求如何用Filter重定向

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

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

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

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

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

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

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

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

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

 response.send Redirect (URL);  

或者

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

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

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

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

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

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

后端Filter:

 import  java .io.IO Exception ;
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.get Header ("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进行相应处理即可。

文章来源:智云一二三科技

文章标题:Ajax请求如何用Filter重定向

文章地址:https://www.zhihuclub.com/184082.shtml

关于作者: 智云科技

热门文章

网站地图