Servlets 从HttpServletRequest获取美化的URL

Servlets 从HttpServletRequest获取美化的URL,servlets,servlet-filters,omnifaces,prettyfaces,Servlets,Servlet Filters,Omnifaces,Prettyfaces,我正在使用org.omnifaces.filter.HttpFilter在无人登录时重定向登录页面上的访问者 @Override public void doFilter(HttpServletRequest req, HttpServletResponse res, HttpSession session, FilterChain chain) throws ServletException, IOException { String loginUrl = "/myapp/login?

我正在使用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?重定向\u url=上一页\u url

问题是,我所有的URL都被漂亮的面孔美化了,当我尝试使用HttpServletRequest.getRequestURI获取前一个URL时,它给出了丑陋的URL

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

但是HttpServletRequest.getRequestURI提供的是/views/module1/page3.xhtml,而不是/myapp/my-page-3


有什么想法吗?

当基于servlet的URL重写引擎使用UnderCovers RequestDispatcher向前转发传入的友好URL请求到所需的资源时,您可以使用request.getAttributeRequestDispatcher.forward\u request\u URI查找原始请求URI

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

由于您已经在使用OmniFaces,因此可以使用ServletsgetRequestURI自动检测并在出现时返回它,否则返回默认的HttpServletRequestgetRequestURI


因为您已经在使用OmniFaces。。Servlets.getRequestURIreq是否返回预期的URI?
String requestURI = Servlets.getRequestURI(request);