代码之家  ›  专栏  ›  技术社区  ›  robinvrd

从HttpServletRequest获取美化的URL

  •  0
  • robinvrd  · 技术社区  · 5 年前

    我正在使用 org.omnifaces.filter.HttpFilter 当没有人登录时,重定向登录页面上的访问者。

    @Override
    public void doFilter(HttpServletRequest req, HttpServletResponse res, HttpSession session, FilterChain chain) throws ServletException, IOException {
        String loginUrl = "/myapp/login?redirect_url=" + req.getRequestURL();
        boolean loggedIn = (req.getRemoteUser() != null);
        if (loggedIn) {
            chain.doFilter(req, res); // So, just continue request.
        } else {
            Servlets.facesRedirect(req, res, loginUrl);
        }
    }  
    

    我想改道 未登录 用户到 /login?redirect_url=previous_page_url

    问题是我所有的网址都被美化了 漂亮的脸蛋 当我试图用 HttpServletRequest.getRequestURI()

    例如,我配置了一个url /myapp/my-page-3 /views/module1/page3.xhtml .

    但是 HttpServletRequest.getRequestURI() /视图/模块1/page3.xhtml /myapp/我的第3页 .

    有什么想法吗?

    0 回复  |  直到 5 年前
        1
  •  4
  •   BalusC    5 年前

    当基于servlet的URL重写引擎在幕后使用 RequestDispatcher#forward() request.getAttribute(RequestDispatcher.FORWARD_REQUEST_URI) 找到原始请求URI。

    String originalRequestURI = request.getAttribute(RequestDispatcher.FORWARD_REQUEST_URI);
    

    因为您已经在使用泛面,所以可以使用 Servlets#getRequestURI() 若要自动检测并在出现时将其返回,则返回默认值 HttpServletRequest#getRequestURI() .

    String requestURI = Servlets.getRequestURI(request);