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 {}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架