问题标签 [ocpsoft-rewrite]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
151 浏览

jsf - commandLink 不会在激活了重写 RewriteRule 的情况下调用操作

我目前在 WildFly 10 的 JRE 8 上使用 rewrite-config-prettyfaces 3.4.0.Final 和 Mojarra 2.2.13。使用该设置(下面有一些细节)一切正常。现在我想删除 pretty-config.xml 文件并切换到基于规则的 RewriteConfiguration。一旦我创建了这个并将我的漂亮配置 url 映射映射到规则中,我的应用程序似乎工作正常。但是,我注意到我的 h:commandLink 操作不再被调用。当我切换回 pretty-config.xml 时,它工作正常,切换回.. urgs。您是否知道为什么这不适用于 RewriteConfiguration?

我的类路径包含以下重写 jar:

  • 重写-servlet-3.4.0.Final.jar
  • rewrite-config-prettyfaces-3.4.0.Final.jar (但这在不工作的设置中被删除)

您可以在下面找到我的一些代码片段。

非常感谢!

我的漂亮配置有这个配置

我的 RewriteConfiguration 文件

我简化的 dummy.xhtml 文件如下所示:

注意:与 commandLink 相关的部分实际上是 catalogDashboard.jsf 的一部分。请考虑存在缺失的虚拟重写规则。

我的 bean 具有通过 commandLink 操作调用的方法

0 投票
1 回答
259 浏览

jsf - 带参数的 Rewrite / PrettyFaces 导致 IllegalStateException:在提交响应后无法创建会话

我想在我的 JSF 2.2 应用程序中使用一些带有注释的 url 重写器,所以我开始使用Rewrite( PrettyFacessuccessor)。

我的应用程序仍然只是在TomEE7.x 中运行的 hello world,我猜这里没有花哨的依赖项。我运行 no web.xml, emptyfaces-config.xml和 empty beans.xml

我创建了一个新的专用支持 bean 和 xhtml 来测试Rewrite,问题是每当我在 Url 中添加一个参数时,我都会得到IllegalStateException无法在响应提交后创建会话

我试图降级到PrettyFaces3.3.3,但发生了完全相同的错误。

这是Backing Bean的代码

和视图

以及我访问时的堆栈跟踪http://localhost:8080/testRoot/aaa

java.lang.IllegalStateException:提交响应后无法创建会话 org.apache.catalina.connector.Request.doGetSession(Request.java:2952) org.apache.catalina.connector.Request.getSession(Request.java:第2361章 : 231) org.apache.myfaces.context.servlet.SessionMap.setAttribute(SessionMap.java:56) org.apache.myfaces.util.AbstractThreadSafeAttributeMap.put(AbstractThreadSafeAttributeMap.java:109) org.apache.myfaces.util.AbstractThreadSafeAttributeMap。 put(AbstractThreadSafeAttributeMap.java:38) org.apache.myfaces.application.viewstate。ServerSideStateCacheImpl.saveSerializedViewInServletSession(ServerSideStateCacheImpl.java:250) org.apache.myfaces.application.viewstate.ServerSideStateCacheImpl.saveSerializedView(ServerSideStateCacheImpl.java:642) org.apache.myfaces.renderkit.html.HtmlResponseStateManager.saveState(HtmlResponseStateManager.java:138) org.apache.myfaces.application.StateManagerImpl.saveView(StateManagerImpl.java:279) org.apache.myfaces.shared.view.JspViewDeclarationLanguageBase.renderView(JspViewDeclarationLanguageBase.java:220) org.apache.myfaces.application.ViewHandlerImpl.renderView( ViewHandlerImpl.java:313) com.ocpsoft.pretty.faces.application.PrettyViewHandler.renderView(PrettyViewHandler.java:163) javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:58) javax.faces.application.ViewHandlerWrapper。renderView(ViewHandlerWrapper.java:58) org.omnifaces.viewhandler.OmniViewHandler.renderView(OmniViewHandler.java:115) org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:116) org.apache.myfaces.lifecycle。 LifecycleImpl.render(LifecycleImpl.java:267) javax.faces.webapp.FacesServlet.service(FacesServlet.java:200) org.apache.tomee.myfaces.TomEEWorkaroundFacesServlet.service(TomEEWorkaroundFacesServlet.java:47) org.apache.tomcat。 websocket.server.WsFilter.doFilter(WsFilter.java:52) com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:145) com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:137)执行(RenderResponseExecutor.java:116) org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:267) javax.faces.webapp.FacesServlet.service(FacesServlet.java:200) org.apache.tomee.myfaces。 TomEEWorkaroundFacesServlet.service(TomEEWorkaroundFacesServlet.java:47) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:145) com.ocpsoft。 Pretty.PrettyFilter.doFilter(PrettyFilter.java:137)执行(RenderResponseExecutor.java:116) org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:267) javax.faces.webapp.FacesServlet.service(FacesServlet.java:200) org.apache.tomee.myfaces。 TomEEWorkaroundFacesServlet.service(TomEEWorkaroundFacesServlet.java:47) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:145) com.ocpsoft。 Pretty.PrettyFilter.doFilter(PrettyFilter.java:137)ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:145) com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:137)ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:145) com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:137)

请注意,如果我从模式 ( pattern = "/testRoot") 中删除参数并且我访问http://localhost:8080/testRoot没有问题,并且视图渲染得很好。

我究竟做错了什么 ?(我已经给出了带有漂亮面孔的版本,我也可以给出带有重写的版本@Join,但我认为问题出在其他地方,因为错误是相同的......)

0 投票
0 回答
130 浏览

filter - 从 WEB-INF 提供 jsf 页面/资源

我了解从任何位置提供 jsf 页面/资源的方法之一是通过 RequestDispatcher#forward()

例如对http://domain/contextpath/someotherlink.xhtml的响应可以被映射

/WEB-INF/serving.xhtml

资源位置与request.getRequestDispatcher("/WEB-INF/serving.xhtml").forward(request, response)

但是映射页面的位置会显示在操作组件中,例如<h:form>

<form method="post" action="/contextpath/WEB_INF/serving.xhtml" > 即使使用OCPsoft Rewrite URLRewriteFilter

@Alex Tsurika 提供了一个示例,但 JSF 专家 @Balusc评论了这种方法的安全漏洞,尽管他提出了相同的调度方法

问题:

  1. 正如@Balusc 提出的那样,如何缓解这个安全漏洞(更新:我猜没有,因为@Balusc 在评论中清除了它)

  2. 如何<form method="post" action="/contextpath/someotherlink.xhtml" >显示而不是<form method="post" action="/contextpath/WEB_INF/serving.xhtml" >

以解决@Paul H提出的问题

是否可以提交从 WEB-INF 中的 JSF 页面位置呈现的表单?

谢谢。

0 投票
1 回答
120 浏览

jsf - 如何将未定义数量的路径参数映射到 Ocpsoft Rewrite 中的请求参数?

目前我正在尝试以下 JSF - Lib:

https://www.ocpsoft.org/rewrite/examples/

我有以下问题:

我有一个页面:/page.jsf

在我的页面中,我只有一个参数。例如我有: - 参数 1 - 参数 2

目前我知道我可以在我的 UrlConfigProvider 类中添加它:

.addRule(Join.path("/page/{parameter1}").to("/portal/mypage.jsf") .withInboundCorrection())

这适用于一个参数。

但是我怎样才能对多个参数执行此操作,所以 URL 是:/page/{parameter1}/{parameter2} ....

有任何想法吗?

0 投票
1 回答
44 浏览

jsf - JSF - 如何通过拦截和重定向潜在的 404 错误来迁移 URL?

迁移网站时,由于旧网站使用不同的 URL 结构或技术,经常会出现死 URL。正确的 301“永久”重定向对于 SEO 友好的迁移很重要。

例子:

旧页面https://example.com/product/coca-cola-bottle.html在我们的 JSF 项目中移动到https://example.com/p/coca-cola-1-l/1000

概念

我们将把这些映射保存在我们的数据库中并将它们添加到我们的 JSF 应用程序中。

如果请求的 URL 无效或被重写,我们希望检查当前请求的 URL 是否存在于我们的数据库中并重定向到新目标。

一些想法?

  • 如果找不到资源,则创建自定义异常处理程序并重定向
  • 覆盖导航处理程序以在异常处理程序之前处理它
  • @WebFilterDispatcherType.ERROR404错误代码检查一起使用
  • 使用 OCPSoft 重写解决方案。如果不将所有映射加载到配置中,不确定如何执行此操作。我更喜欢动态(惰性)方法。

现在我使用注入的 bean实现了@WebFilter版本来查找映射。

0 投票
1 回答
20 浏览

jsf - JSF - 忽略 URL 中的大小写 (OCPSoft)

有没有办法在 OCPSoft 重写中定义重写规则,而不是定义多个规则,因为任何字符都可以是小写或大写?

就像是:

背景:

记录我们的 404 错误时,我遇到了很多使用小写 URL 的请求。

0 投票
0 回答
11 浏览

jsf - jsf - 在过滤器中获取可收藏的 URL

我如何检索可收藏的 URL,尊重使用@WebFilter内的ViewHandler.getBookmarkableURL(...)将用户重定向到重写的登录页面 URL 的重写规则。

是否有替代功能可以在没有FacesContext的情况下获取可收藏的 URL ?

简化示例

页面/sites/user/login.xhtml使用 OCPSoft 重写库重写为/Login,但在以下过滤器中,我不知道如何执行此操作,因为我无权访问FacesContext

真实示例具有额外的查询字符串参数,这些参数也有助于重写 URL

0 投票
0 回答
8 浏览

apache - JSF - 代理丢失的转发 URL

当对我们的 glassfish 5 使用 apache 代理时,转发的 URL 数据会丢失。

这发生在我们的登录@WebFilter中,并且可以使用简单的 ajax 页面更新和<h:outputText value="forward.request_uri: #{requestScope['javax.servlet.forward.request_uri']}" />.

测试用例

本例访问 URL http://localhost:3080/News

这个 URL 代表我们的testTenant并被代理到:/tenant/testTenant/News,它是/sites/tenant/news.xhtml?tenant=testTentant使用 OCPSoft 库的重写版本。

请求标头主机 x-forwarded-host在 ajax 检查上正确设置为http://localhost:3080#{headerValues}

GET 请求在标记中正确

forward.request_uri: /News

标记中的 AJAX 请求错误

forward.request_uri: /tenant/testTenant/News

Java中的WebFilter错误

将其记录在@WebFilter中,即使在第一个 GET 请求中使用request.getAttribute("javax.servlet.forward.request_uri")也会给出相同的错误 URI。

这可能是什么原因丢失?

request.getAttribute("javax.servlet.forward.request_uri")和之间有区别#{requestScoped['request.getAttribute("javax.servlet.forward.request_uri')}吗?