问题标签 [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.
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 操作调用的方法
jsf - 带参数的 Rewrite / PrettyFaces 导致 IllegalStateException:在提交响应后无法创建会话
我想在我的 JSF 2.2 应用程序中使用一些带有注释的 url 重写器,所以我开始使用Rewrite
( PrettyFaces
successor)。
我的应用程序仍然只是在TomEE
7.x 中运行的 hello world,我猜这里没有花哨的依赖项。我运行 no web.xml
, emptyfaces-config.xml
和 empty beans.xml
。
我创建了一个新的专用支持 bean 和 xhtml 来测试Rewrite
,问题是每当我在 Url 中添加一个参数时,我都会得到IllegalStateException
:无法在响应提交后创建会话
我试图降级到PrettyFaces
3.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
,但我认为问题出在其他地方,因为错误是相同的......)
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评论了这种方法的安全漏洞,尽管他提出了相同的调度方法
问题:
正如@Balusc 提出的那样,如何缓解这个安全漏洞(更新:我猜没有,因为@Balusc 在评论中清除了它)
如何
<form method="post" action="/contextpath/someotherlink.xhtml" >
显示而不是<form method="post" action="/contextpath/WEB_INF/serving.xhtml" >
以解决@Paul H提出的问题
是否可以提交从 WEB-INF 中的 JSF 页面位置呈现的表单?
谢谢。
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} ....
有任何想法吗?
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 是否存在于我们的数据库中并重定向到新目标。
一些想法?
- 如果找不到资源,则创建自定义异常处理程序并重定向
- 覆盖导航处理程序以在异常处理程序之前处理它
- 将@WebFilter与DispatcherType.ERROR和404错误代码检查一起使用
- 使用 OCPSoft 重写解决方案。如果不将所有映射加载到配置中,不确定如何执行此操作。我更喜欢动态(惰性)方法。
现在我使用注入的 bean实现了@WebFilter版本来查找映射。
jsf - JSF - 忽略 URL 中的大小写 (OCPSoft)
有没有办法在 OCPSoft 重写中定义重写规则,而不是定义多个规则,因为任何字符都可以是小写或大写?
就像是:
背景:
记录我们的 404 错误时,我遇到了很多使用小写 URL 的请求。
jsf - jsf - 在过滤器中获取可收藏的 URL
我如何检索可收藏的 URL,尊重使用@WebFilter内的ViewHandler.getBookmarkableURL(...)将用户重定向到重写的登录页面 URL 的重写规则。
是否有替代功能可以在没有FacesContext的情况下获取可收藏的 URL ?
简化示例
页面/sites/user/login.xhtml使用 OCPSoft 重写库重写为/Login,但在以下过滤器中,我不知道如何执行此操作,因为我无权访问FacesContext。
真实示例具有额外的查询字符串参数,这些参数也有助于重写 URL
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')}
吗?