ServletRequest.getRequestURL()
时间: 2023-12-23 21:05:57 浏览: 160
ServletRequest.getRequestURL() 方法返回客户端发出请求时的完整URL地址,包括协议、服务器名、端口号、请求路径等信息。它返回一个 StringBuffer 对象,可以使用它的 toString() 方法获取完整的URL地址字符串。该方法常用于获取当前请求的URL地址,以便进行一些相关的操作,比如在页面中输出当前URL等。需要注意的是,当前请求的URL可能会被重写或者重定向,因此在某些情况下,getRequestURL() 方法返回的URL地址并不是最终的URL地址。
相关问题
@Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws ServletException, IOException { //过滤前 filterChain.doFilter(servletRequest,servletResponse); //过滤后 HttpServletRequest request=(HttpServletRequest)servletRequest; HttpServletResponse response=(HttpServletResponse)servletResponse; log.writeLog("拦截到URL:"+request.getRequestURL()); log.writeLog("拦截到URI:"+request.getRequestURI()); // 将请求包装成 MyHttpServletRequestWrapper 类 MyHttpServletRequestWrapper myRequestWrapper = new MyHttpServletRequestWrapper(request); // 获取请求返回的数据 String requestBody = myRequestWrapper.getBody(); log.writeLog("requestBody:"+requestBody); }我这个代码写的有问题吗
这段代码是一个 Servlet 过滤器的实现。主要功能是在请求被处理前和处理后,记录请求的 URL、URI、以及请求体等信息。
代码看起来没有明显的问题,但是在使用过程中需要注意以下几点:
1. 在过滤器中调用 `filterChain.doFilter` 方法,表示将请求交给下一个过滤器或 Servlet 处理,如果没有下一个过滤器或 Servlet,则请求直接返回客户端。因此,如果请求没有被处理,就需要检查是否存在其他过滤器或 Servlet 未正常处理请求。
2. 在使用 `MyHttpServletRequestWrapper` 类包装请求时,需要注意该类的实现是否正确,以及是否会影响到后续的请求处理。
3. 在记录请求信息时,需要注意日志输出的级别和格式,以便后续的问题排查和分析。
总的来说,这段代码实现了一个基本的请求日志记录功能,但是在实际使用时需要根据具体情况进行调整和优化。
@WebFilter("/*") public class LoginFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; HttpSession session = req.getSession(); Object user = session.getAttribute("userName"); System.out.println(user); if (user != null) { System.out.println("!!!"); chain.doFilter(request, response); } else { String[] urls = { "login.html", "t/login.html", "imgs/", "css/", "js/", "element-ui/", "user/login", "user/checkCode"}; String url = req.getRequestURL().toString(); for (String u : urls) { if (url.contains(u)) { System.out.println(url); chain.doFilter(request, response); //break; return; } } HttpServletResponse resp = (HttpServletResponse) response; resp.sendRedirect("/login.html?1");
这段代码是一个过滤器,用于拦截所有请求并检查用户是否已经登录。如果用户已经登录,就会继续处理请求;否则,会重定向到登录页面。过滤器的实现方式是实现 Filter 接口并在 doFilter 方法中编写拦截逻辑。在这个例子中,过滤器会检查 HttpSession 中是否存在 userName 属性,如果存在,就表示用户已经登录。如果不存在,就会检查请求的 URL 是否需要被放行(如静态资源或登录页面本身),如果需要被放行,就会调用 FilterChain 的 doFilter 方法将请求传递给下一个过滤器或 Servlet 处理;否则,就会重定向到登录页面。
阅读全文