路径跟踪过滤器

import java.io.IOException;

import java.util.Enumeration;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

public class PathFilter implements Filter {
    public void destroy() {}

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        HttpServletRequest request     = (HttpServletRequest) request;
        String             path  = request.getRequestURI();
        Enumeration        e     = request.getParameterNames();
        StringBuffer       param = new StringBuffer();

        param.append("?");

        while (e.hasMoreElements()) {
            String name = (String) e.nextElement();

            param.append(name);

            String value = (String) request.getParameter(name);

            param.append("=" + value + "&");
        }

        param.deleteCharAt(param.length() - 1);

        HttpSession s       = request.getSession();
        String      curpath = (String) s.getAttribute("curpath");

        if (curpath == null) {
            s.setAttribute("curpath", path + param.toString());
        } else {
            if (!curpath.substring(0, (curpath.indexOf("?") == -1)
                                      ? curpath.length()
                                      : curpath.indexOf("?")).equals(path)) {
                s.setAttribute("lastpath", curpath);
                s.setAttribute("curpath", path + param.toString());
            }
        }

        chain.doFilter(request, response);
    }

    public void init(FilterConfig arg0) throws ServletException {}
}
posted @   maventalker  阅读(105)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示