{"id":34,"date":"2009-07-19T23:27:48","date_gmt":"2009-07-19T15:27:48","guid":{"rendered":"http:\/\/broso.twbbs.org\/blojsom\/blog\/default\/ITTech\/Java\/?permalink=Disable-JSESSIONID-URL-Rewriting-in-JSF.html"},"modified":"2009-07-19T23:27:48","modified_gmt":"2009-07-19T15:27:48","slug":"disable-jsessionid-url-rewriting-in-jsf","status":"publish","type":"post","link":"https:\/\/cychien.tw\/wordpress\/2009\/07\/19\/disable-jsessionid-url-rewriting-in-jsf\/","title":{"rendered":"Disable JSESSIONID URL Rewriting in JSF"},"content":{"rendered":"<link rel=\"stylesheet\" type=\"text\/css\" href=\"http:\/\/broso.twbbs.org\/blojsom\/resources\/default\/java.css\" \/>\n<p>\u6700\u8fd1\u5728\u5de5\u4f5c\u4e0a\u7528 JSF \u5beb\u7a0b\u5f0f\u6642\uff0c\u767c\u73fe\u5982\u679c\u7528 &lt;h:outputLink \/&gt; \u9019\u500b tag \u4f86\u8f38\u51fa &lt;a href=\u201dxxxx\u201d \/&gt; \u4e4b\u985e\u7684\u9023\u7d50<more\/>\uff0c\u5728\u700f\u89bd\u5668\u9996\u6b21\u700f\u89bd\u6642\uff0cJSF \u7522\u751f\u7684\u9023\u7d50\u6703\u81ea\u52d5\u5c07 jsessionid \u9644\u5728 URL \u7684\u5f8c\u9762\u3002<\/p>\n<p>\u4f8b\u5982\u4e0b\u5716\uff0c\u6211\u7528 &lt;h:outputLink value=\u201d#{bundle[\u2018link.hinet\u2019]}\u201d \/&gt; \u7522\u751f\u4e00\u500b Hinet \u7684\u9023\u7d50\uff08link.hinet \u5b9a\u7fa9\u65bc ResourceBundle \u4e2d\uff09\u3002\u9996\u6b21\u57f7\u884c\u6642\uff0c\u53ef\u4ee5\u770b\u51fa\u5728 Hinet \u9023\u7d50\u5f8c\u9762 JSF \u81ea\u52d5\u5e6b\u5fd9\u52a0\u4e0a\u4e86 jsessionid \u7684\u53c3\u6578\u3002    <br \/><img decoding=\"async\" data-src=\"http:\/\/broso.twbbs.org\/blojsom\/resources\/default\/20090719_jsf_jsessionid\/jsf_jsessionid.png\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" \/> <\/p>\n<p>\u5982\u679c\u76ee\u7684\u5730\u4e0d\u662f\u4e00\u500b J2EE Web \u61c9\u7528\u7a0b\u5f0f\uff0c\u76f4\u63a5\u9ede\u4e0b\u53bb\uff0c\u5f88\u5bb9\u6613\u6703\u51fa\u73fe 404 Not Found \u7684\u932f\u8aa4\u8a0a\u606f\u3002 <br \/><img decoding=\"async\" data-src=\"http:\/\/broso.twbbs.org\/blojsom\/resources\/default\/20090719_jsf_jsessionid\/jsf_jsessionid_404.png\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" \/> <\/p>\n<p>\u521d\u6b65\u731c\u60f3\u61c9\u8a72\u662f\u9996\u6b21\u700f\u89bd\u6642\uff0cJSF \u91dd\u5c0d jsessionid \u505a\u4e86 URL Rewriting\u3002\u56e0\u70ba\u9996\u6b21\u700f\u89bd\u6642\uff0cJSF \u9084\u4e0d\u77e5\u9053\u700f\u89bd\u5668\u662f\u5426\u6709\u5c07 Cookie enable\uff0c\u6240\u4ee5\u9664\u4e86\u5617\u8a66\u8981\u5c07 jsessionid \u8a2d\u5b9a\u5230 Cookie \u4e4b\u5916\uff0c\u53e6\u5916\u5728 URL \u4e0a\u9762\u4e5f\u91dd\u5c0d session id \u505a\u4e86\u4e00\u6b21\u91cd\u5beb\uff0c\u4ee5\u4fbf\u4fdd\u8b49 session \u53ef\u4ee5\u50b3\u905e\u5230\u4e0b\u4e00\u500b\u52d5\u4f5c\u3002<\/p>\n<p>\u5be6\u969b\u9a57\u8b49\u7684\u7d50\u679c\uff0c\u5728\u9996\u6b21\u700f\u89bd\u4e4b\u5f8c\uff0c\u518d\u5c07 URL \u4e2d\u7684 jsessionid \u53c3\u6578\u79fb\u9664\uff0c\u5728\u529f\u80fd\u4e0a\u4e5f\u662f\u5b8c\u5168\u4e0d\u53d7\u5f71\u97ff\uff0c\u56e0\u6b64\u6211\u53ef\u4ee5\u78ba\u8a8d\u61c9\u8a72\u662f\u9019\u500b\u554f\u984c\u3002\u627e\u4e86\u5f88\u4e45\uff0c\u5f9e\u66f8\u4e0a\u8ddf Google \u627e\u4f86\u627e\u53bb\uff0c\u4f3c\u4e4e\u4e5f\u6c92\u770b\u5230 JSF \u4e0a\u6709\u53ef\u4ee5\u5c07\u9019\u500b\u81ea\u52d5\u91cd\u5beb\u6a5f\u5236\u95dc\u6389\u7684\u53c3\u6578\u3002\u6240\u4ee5\u770b\u8d77\u4f86\u53ea\u80fd\u5f9e J2EE Web Context \u4f86\u60f3\u8fa6\u6cd5\u4e86\u3002<\/p>\n<p>\u5f9e Google \u4e0a\u627e\u5230\u4e86\u4e00\u7bc7\u6587\u7ae0 <a href=\"http:\/\/www.blogjava.net\/steady\/archive\/2007\/09\/08\/143664.html\">\u7981\u7528JavaWeb\u61c9\u7528\u4e2dURL\u4e0a\u5305\u542b\u7684jsessionid<\/a> \uff0c\u88e1\u9762\u63d0\u5230\u7684\u65b9\u5f0f\u5c31\u662f\u5148\u7e7c\u627f HttpServletResponse\uff0c\u5be6\u4f5c\u4e00\u500b\u81ea\u5df1\u7684 HttpServletResponseWrapper\uff0c\u4e26\u4e14\u5c07\u6240\u6709\u76f8\u95dc\u7684 encodeUrl \u51fd\u5f0f\u5168\u90e8\u6539\u5beb\uff0c\u76f4\u63a5\u56de\u50b3 URL\uff0c\u4e0d\u518d\u52a0\u4ee5\u8655\u7406\u3002\u518d\u642d\u914d Filter \u4f86\u8655\u7406\u6bcf\u4e00\u500b Request \/ Response\u3002<\/p>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"2\" bgcolor=\"#999999\">\n<tbody>\n<tr>\n<td bgcolor=\"#dddddd\" valign=\"top\" width=\"1\" align=\"left\">\n<pre><font color=\"#555555\">1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>\n\n<\/font><\/pre>\n<\/td>\n<td bgcolor=\"#ffffff\" valign=\"top\" align=\"left\">\n<pre><font class=\"java-reserved_word\">\npublic void doFilter(ServletRequest request, ServletResponse response,\n\t\tFilterChain chain) throws IOException, ServletException {\n\t\/\/ TODO Auto-generated method stub\n\tif (!(request instanceof HttpServletRequest)) {  \n           chain.doFilter(request, response);  \n\t\treturn;  \n\t}  \n\n\tHttpServletRequest httpRequest = (HttpServletRequest) request;  \n\tHttpServletResponse httpResponse = (HttpServletResponse) response;  \t\t\n\tif (httpRequest.isRequestedSessionIdFromURL()) {  \n\t    HttpSession session = httpRequest.getSession();  \n\t\tif (session != null) session.invalidate();  \n\t}  \t\t\n\t\n\tHttpServletResponseWrapper wrappedResponse  \n\t    = new HttpServletResponseWrapper(httpResponse) \n\t{  \n\t    public String encodeRedirectUrl(String url) { return url; }  \n\t    public String encodeRedirectURL(String url) { return url; }  \n\t    public String encodeUrl(String url) { return url; }  \n\t    public String encodeURL(String url) { return url; }  \n\t };\n\t \n\t chain.doFilter(request, wrappedResponse);\n}\n\n<\/font><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u6240\u4ee5\u5f8c\u7e8c JSF \u547c\u53eb encodeUrl \u4f86\u9032\u884c rewriting \u6642\uff0c\u81ea\u7136 jsessionid \u4e5f\u4e0d\u6703\u88ab\u52a0\u4e0a\u53bb\u4e86\u3002<\/p>\n<p>\u5be6\u969b\u90e8\u7f72\u5f8c\uff0c\u679c\u7136\u9996\u6b21\u700f\u89bd\u6642\uff0cURL \u5c31\u4e0d\u6703\u518d\u51fa\u73fe jsessionid \u4e86\u3002\u4e0d\u904e\u5982\u6b64\u7684\u7d50\u679c\u5c31\u662f Client \u7aef\u5fc5\u9808\u555f\u52d5 Cookie \u4e86\u3002<br \/>\n<br \/><img decoding=\"async\" data-src=\"http:\/\/broso.twbbs.org\/blojsom\/resources\/default\/20090719_jsf_jsessionid\/jsf_jsessionid_ok.png\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" \/><\/p>\n<p>\n\u4e0b\u8f09 <a href=\"http:\/\/broso.twbbs.org\/blojsom\/resources\/default\/20090719_jsf_jsessionid\/DisableUrlSessionFilter.java\">DisableUrlSessionFilter.java<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u6700\u8fd1\u5728\u5de5\u4f5c\u4e0a\u7528 JSF \u5beb\u7a0b\u5f0f\u6642\uff0c\u767c\u73fe\u5982\u679c\u7528 &lt;h:outputLink \/&gt; \u9019\u500b tag \u4f86\u8f38 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11],"tags":[],"class_list":["post-34","post","type-post","status-publish","format-standard","hentry","category-ittechjava"],"_links":{"self":[{"href":"https:\/\/cychien.tw\/wordpress\/wp-json\/wp\/v2\/posts\/34","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cychien.tw\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cychien.tw\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cychien.tw\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cychien.tw\/wordpress\/wp-json\/wp\/v2\/comments?post=34"}],"version-history":[{"count":0,"href":"https:\/\/cychien.tw\/wordpress\/wp-json\/wp\/v2\/posts\/34\/revisions"}],"wp:attachment":[{"href":"https:\/\/cychien.tw\/wordpress\/wp-json\/wp\/v2\/media?parent=34"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cychien.tw\/wordpress\/wp-json\/wp\/v2\/categories?post=34"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cychien.tw\/wordpress\/wp-json\/wp\/v2\/tags?post=34"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}