从 HttpServletRequest 得到美化 URL
Get beautified URL from HttpServletRequest
我正在使用 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
问题是我所有的 URL 都被 漂亮的面孔 美化了,当我尝试用 [=14 获得以前的 URL =], 它给我丑陋的 URL.
比如我配置了一个url /myapp/my-page-3
显示/views/module1/page3.xhtml
.
但是 HttpServletRequest.getRequestURI()
给了我 /views/module1/page3.xhtml
而 没有 /myapp/my-page-3
.
有什么想法吗?
当基于 servlet 的 URL 重写引擎在幕后使用 RequestDispatcher#forward()
将传入的友好 URL 请求转发到所需资源时,您可以使用 request.getAttribute(RequestDispatcher.FORWARD_REQUEST_URI)
找出原始请求URI。
String originalRequestURI = request.getAttribute(RequestDispatcher.FORWARD_REQUEST_URI);
由于您已经在使用 OmniFaces,您可以使用 Servlets#getRequestURI()
自动检测它并 return 它存在时,否则回退到默认值 HttpServletRequest#getRequestURI()
。
String requestURI = Servlets.getRequestURI(request);
我正在使用 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
问题是我所有的 URL 都被 漂亮的面孔 美化了,当我尝试用 [=14 获得以前的 URL =], 它给我丑陋的 URL.
比如我配置了一个url /myapp/my-page-3
显示/views/module1/page3.xhtml
.
但是 HttpServletRequest.getRequestURI()
给了我 /views/module1/page3.xhtml
而 没有 /myapp/my-page-3
.
有什么想法吗?
当基于 servlet 的 URL 重写引擎在幕后使用 RequestDispatcher#forward()
将传入的友好 URL 请求转发到所需资源时,您可以使用 request.getAttribute(RequestDispatcher.FORWARD_REQUEST_URI)
找出原始请求URI。
String originalRequestURI = request.getAttribute(RequestDispatcher.FORWARD_REQUEST_URI);
由于您已经在使用 OmniFaces,您可以使用 Servlets#getRequestURI()
自动检测它并 return 它存在时,否则回退到默认值 HttpServletRequest#getRequestURI()
。
String requestURI = Servlets.getRequestURI(request);