<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Struts2 action 的 ;jsessionid=xxx 使找不到頁面 Bug 的解決 [轉帖]

    原文地址
    自己留個地址,遇到這個問題可以考慮使用。不過要重新編譯struts2的jar包確實比較。。。

    剛剛又找到一個解決辦法:

    在用Struts的時候發現這樣一個問題,不管我們的程序中是否創建了一個新的session,從頁面提交表單到action類,再跳轉到頁面的時候url中總是出現了;jsessionid這樣的一長串內容,這是由于新建的session導致容器產生的。

    經過深入研究struts的代碼發現問題所在,原來是struts在處理自動Locale時導致的,struts調用了request.getSession()方法,該方法等同于 request.getSession(true) ,相當于不存在session時就自動創建一個新的session,于是就出現前面提到的現象。

    要解決這個問題必須關閉struts的自動Locale的功能,不過很簡單,只用在struts-config.xml的controller配置增加一個locale參數值等于false即可,如:

    <controller locale="false"/>


    上述辦法貌似針對的是Struts1的。又去搜索了一下。或許可以用一下方案:
    通過加入 Filter 的方式過濾掉 URL 中包含的 jsessionid,再重新包裝 Response 返回給瀏覽器。

    代碼如下:
    DisableUrlSessionFilter.java
    package com.randomcoder.security;

    import java.io.IOException;

    import javax.servlet.*;
    import javax.servlet.http.*;

    /**
     * Servlet filter which disables URL-encoded session identifiers.
     * 
     * <pre>
     * Copyright (c) 2006, Craig Condit. All rights reserved.
     * 
     * Redistribution and use in source and binary forms, with or without
     * modification, are permitted provided that the following conditions are met:
     * 
     *   * Redistributions of source code must retain the above copyright notice,
     *     this list of conditions and the following disclaimer.
     *   * Redistributions in binary form must reproduce the above copyright notice,
     *     this list of conditions and the following disclaimer in the documentation
     *     and/or other materials provided with the distribution.
     *     
     * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
     * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
     * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     * POSSIBILITY OF SUCH DAMAGE.
     * </pre>
     
    */

    @SuppressWarnings(
    "deprecation")
    public class DisableUrlSessionFilter implements Filter
    {

        
    /**
         * Filters requests to disable URL-based session identifiers. 
         
    */

        
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
        
    {
            
    // skip non-http requests
            if (!(request instanceof HttpServletRequest))
            
    {
                chain.doFilter(request, response);
                
    return;
            }

            
            HttpServletRequest httpRequest 
    = (HttpServletRequest) request;
            HttpServletResponse httpResponse 
    = (HttpServletResponse) response;
            
            
    // clear session if session id in URL
            if (httpRequest.isRequestedSessionIdFromURL())
            
    {
                HttpSession session 
    = httpRequest.getSession();
                
    if (session != null) session.invalidate();
            }

                    
            
    // wrap response to remove URL encoding
            HttpServletResponseWrapper wrappedResponse = new HttpServletResponseWrapper(httpResponse)
            
    {
                @Override
                
    public String encodeRedirectUrl(String url) return url; }

                @Override
                
    public String encodeRedirectURL(String url) return url; }

                @Override
                
    public String encodeUrl(String url) return url; }

                @Override
                
    public String encodeURL(String url) return url; }
            }
    ;
            
            
    // process next request in chain
            chain.doFilter(request, wrappedResponse);
        }


        
    /**
         * Unused.
         
    */

        
    public void init(FilterConfig config) throws ServletException {}
        
        
    /**
         * Unused.
         
    */

        
    public void destroy() {}
    }


    相應的web.xml文件為:
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi
    ="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation
    ="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
        version
    ="2.4">

        
    <context-param>
            
    <param-name>contextConfigLocation</param-name>
            
    <param-value>/WEB-INF/applicationContext.xml</param-value>
        
    </context-param>

        
    <!-- 
        <context-param>
            <param-name>javax.servlet.jsp.jstl.fmt.fallbackLocale</param-name>
            <param-value>en_US</param-value>
        </context-param>
        
    -->
        
        
    <context-param>
            
    <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
            
    <param-value>ApplicationResources</param-value>
        
    </context-param>
        
        
    <listener>
            
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        
    </listener>
        
        
    <filter>
            
    <filter-name>DisableUrlSessionFilter</filter-name>
            
    <filter-class>com.randomcoder.security.DisableUrlSessionFilter</filter-class>
        
    </filter>
        
        
    <filter>
            
    <filter-name>OpenSessionInViewFilter</filter-name>
            
    <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
        
    </filter>

        
    <filter>
            
    <filter-name>CitadelFilter</filter-name>
            
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>        
            
    <init-param>
                
    <param-name>targetBeanName</param-name>
                
    <param-value>citadelFilter</param-value>
            
    </init-param>
        
    </filter>
        
        
    <filter-mapping>
            
    <filter-name>DisableUrlSessionFilter</filter-name>
            
    <url-pattern>/*</url-pattern>
        
    </filter-mapping>

        
    <filter-mapping>
            
    <filter-name>OpenSessionInViewFilter</filter-name>
            
    <url-pattern>/*</url-pattern>
        
    </filter-mapping>

        
    <filter-mapping>
            
    <filter-name>CitadelFilter</filter-name>
            
    <url-pattern>/*</url-pattern>
        
    </filter-mapping>
        
        
    <servlet>
            
    <servlet-name>springmvc</servlet-name>
            
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            
    <load-on-startup>1</load-on-startup>
        
    </servlet>

        
    <servlet-mapping>
            
    <servlet-name>springmvc</servlet-name>        
            
    <url-pattern>/home</url-pattern>
        
    </servlet-mapping>

        
    <servlet-mapping>
            
    <servlet-name>springmvc</servlet-name>        
            
    <url-pattern>/login</url-pattern>
        
    </servlet-mapping>

        
    <servlet-mapping>
            
    <servlet-name>springmvc</servlet-name>        
            
    <url-pattern>/login-error</url-pattern>
        
    </servlet-mapping>

        
    <servlet-mapping>
            
    <servlet-name>springmvc</servlet-name>        
            
    <url-pattern>/logout</url-pattern>
        
    </servlet-mapping>

        
    <servlet-mapping>
            
    <servlet-name>springmvc</servlet-name>        
            
    <url-pattern>/article/*</url-pattern>
        
    </servlet-mapping>

        
    <servlet-mapping>
            
    <servlet-name>springmvc</servlet-name>        
            
    <url-pattern>/articles/*</url-pattern>
        
    </servlet-mapping>

        
    <servlet-mapping>
            
    <servlet-name>springmvc</servlet-name>        
            
    <url-pattern>/tag/*</url-pattern>
        
    </servlet-mapping>

        
    <servlet-mapping>
            
    <servlet-name>springmvc</servlet-name>        
            
    <url-pattern>/tags/*</url-pattern>
        
    </servlet-mapping>

        
    <servlet-mapping>
            
    <servlet-name>springmvc</servlet-name>        
            
    <url-pattern>/legal/*</url-pattern>
        
    </servlet-mapping>

        
    <servlet-mapping>
            
    <servlet-name>springmvc</servlet-name>        
            
    <url-pattern>/test/*</url-pattern>
        
    </servlet-mapping>
        
        
    <session-config>
            
    <session-timeout>30</session-timeout>
        
    </session-config>

        
    <welcome-file-list>
            
    <welcome-file>index.jsp</welcome-file>
            
    <welcome-file>index.html</welcome-file>
        
    </welcome-file-list>
        
        
    <jsp-config>
            
    <jsp-property-group>
                
    <url-pattern>*.jsp</url-pattern>
                
    <el-ignored>false</el-ignored>
                
    <page-encoding>UTF-8</page-encoding>
                
    <scripting-invalid>true</scripting-invalid>
            
    </jsp-property-group>
        
    </jsp-config>
        
        
    <resource-ref>
            
    <res-ref-name>jdbc/randomcoder</res-ref-name>
            
    <res-type>javax.sql.DataSource</res-type>
            
    <res-auth>Container</res-auth>
        
    </resource-ref>
        
        
    <env-entry>
            
    <env-entry-name>loginEncryptionKey</env-entry-name>
            
    <env-entry-type>java.lang.String</env-entry-type>
        
    </env-entry>

        
    <mime-mapping>
            
    <extension>wsdl</extension>
            
    <mime-type>text/xml</mime-type>
        
    </mime-mapping>

    </web-app>

    posted on 2008-08-12 10:40 SeesSea 閱讀(3783) 評論(0)  編輯  收藏 所屬分類: JAVA

    <2008年8月>
    272829303112
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456

    導航

    統計

    常用鏈接

    留言簿(2)

    隨筆分類

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 免费国产草莓视频在线观看黄| 欧美三级在线电影免费| 亚洲午夜无码毛片av久久京东热| 亚洲AV无码一区二三区| 国产在线a免费观看| 99视频在线精品免费| 国产精品成人免费观看| 亚洲成AV人影片在线观看| 亚洲综合小说久久另类区| 亚洲一区二区三区偷拍女厕| 免费观看四虎精品国产永久| 无码人妻精品中文字幕免费东京热| 中文字幕乱码免费看电影| 国产精品亚洲专一区二区三区| 亚洲AV成人噜噜无码网站| 亚洲精品在线播放| 亚洲AV永久无码区成人网站| 亚洲精品成人在线| 四虎永久免费地址在线观看| 成人黄软件网18免费下载成人黄18免费视频 | 亚洲视频一区在线观看| 亚洲精品无码专区久久久| 国产精品亚洲不卡一区二区三区| 成人永久免费高清| 成年人免费观看视频网站| 国产精品无码免费播放| 曰批全过程免费视频播放网站| 91福利免费网站在线观看| 中文字幕在线免费播放| 国产成人1024精品免费| 久久高潮一级毛片免费| 久久精品免费网站网| 两个人看的www免费视频| 日韩精品无码免费专区午夜不卡| 精选影视免费在线 | 中文字幕在线免费视频| 日本高清高色视频免费| 高清一区二区三区免费视频| 午夜免费福利小电影| 在线观看免费中文视频| 69天堂人成无码麻豆免费视频|