問題タブ [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 は、rewrite RewriteRule がアクティブ化された状態でアクションを呼び出さない
私は現在、WildFly 10 の JRE 8 で Mojarra 2.2.13 で rewrite-config-prettyfaces 3.4.0.Final を使用しています。ここで、pretty-config.xml ファイルを削除して、ルール ベースの RewriteConfiguration に切り替えたいと思います。これを作成し、pretty-config url-mapping をルールにマッピングすると、アプリケーションは正常に動作するように見えます。しかし、h:commandLink アクションが呼び出されなくなったことに気付きました。pretty-config.xml に戻すと正常に動作します。元に戻してください。これが RewriteConfiguration で機能しない理由はありますか?
私のクラスパスには、次の書き換え jar が含まれています。
- rewrite-servlet-3.4.0.Final.jar
- rewrite-config-prettyfaces-3.4.0.Final.jar (ただし、これは動作していないセットアップでは削除されます)
以下に、私のコードのスニペットをいくつか示します。
どうもありがとう!
私のかなり構成はこの構成を持っています
私の RewriteConfiguration ファイル
私の単純化した dummy.xhtml ファイルは次のようになります。
注: commandLink に関連するセクションは、実際には catalogDashboard.jsf の一部です。欠落しているダミーの書き換え規則が存在すると考えてください。
commandLinkアクションを介して呼び出すメソッドを持つ私のBean
jsf - パラメーターを使用した書き換え/ PrettyFaces により、IllegalStateException: 応答がコミットされた後にセッションを作成できません
JSF 2.2 アプリケーションで注釈付きの URL リライターを使用したいので、Rewrite
(PrettyFaces
後継者 ) をいじり始めました。
私のアプリケーションはまだ 7.x で実行されている単なる Hello World であり、TomEE
特別な依存関係はないと思います。no web.xml
、 empty faces-config.xml
、 empty で実行しますbeans.xml
。
テスト用に新しい専用バッキング Bean と xhtml を作成しましたRewrite
。問題は、Url にパラメーターを追加するたびに、応答がコミットされた後にセッションを作成できませんIllegalStateException
。
3.3.3にダウングレードしようとしましPrettyFaces
たが、まったく同じエラーが発生します。
バッキング Bean のコードは次のとおりです。
とビュー
アクセス時のスタックトレースhttp://localhost:8080/testRoot/aaa
java.lang.IllegalStateException: 応答がコミットされた後にセッションを作成できません org.apache.catalina.connector.Request.doGetSession(Request.java:2952) 2361) org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:896) javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:231) javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java: 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)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)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)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
すると、問題はなく、ビューが適切にレンダリングされることに注意してください。
私は何を間違っていますか?(prettyfaces のバージョンを指定しました。Rewrite のバージョンも指定でき@Join
ますが、エラーは同じであるため、問題は別の場所にあると思います...)
filter - WEB-INF からの jsf ページ/リソースの提供
任意の場所から jsf ページ/リソースを提供する方法の 1 つは 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 Expert @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 - JSF - URL の大文字と小文字を区別しない (OCPSoft)
どの文字も小文字または大文字になる可能性があるため、複数のルールを定義する代わりに、大文字と小文字を区別せずにOCPSoft書き換えで書き換えルールを定義する方法はありますか?
何かのようなもの:
バックグラウンド:
404 エラーをログに記録すると、小文字の URL だけで多くのリクエストが発生します。