<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 的解決 [轉(zhuǎn)帖]

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

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

    在用Struts的時候發(fā)現(xiàn)這樣一個問題,不管我們的程序中是否創(chuàng)建了一個新的session,從頁面提交表單到action類,再跳轉(zhuǎn)到頁面的時候url中總是出現(xiàn)了;jsessionid這樣的一長串內(nèi)容,這是由于新建的session導(dǎo)致容器產(chǎn)生的。

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

    要解決這個問題必須關(guān)閉struts的自動Locale的功能,不過很簡單,只用在struts-config.xml的controller配置增加一個locale參數(shù)值等于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() {}
    }


    相應(yīng)的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 閱讀(3787) 評論(0)  編輯  收藏 所屬分類: JAVA

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

    導(dǎo)航

    統(tǒng)計

    常用鏈接

    留言簿(2)

    隨筆分類

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 精品丝袜国产自在线拍亚洲| 97在线观看永久免费视频| 亚洲三级在线播放| 最新精品亚洲成a人在线观看| 亚洲精品无码久久千人斩| 国内一级一级毛片a免费| 性xxxxx大片免费视频| ssswww日本免费网站片| 亚洲AV日韩综合一区尤物| 亚洲免费在线播放| 亚洲最大免费视频网| 在线观看片免费人成视频播放| 国产成人精品日本亚洲语音 | 亚洲丰满熟女一区二区哦| 亚洲视频免费一区| 久久久久亚洲AV成人无码| 亚洲色无码一区二区三区| 24小时日本韩国高清免费| 免费毛片在线看不用播放器| eeuss免费影院| 欧洲美女大片免费播放器视频| 国产∨亚洲V天堂无码久久久| 亚洲精品第一国产综合境外资源 | 亚洲成av人片不卡无码| 亚洲av成人无码久久精品| 亚洲精品国产精品乱码在线观看| 日产国产精品亚洲系列| 日韩免费视频一区| 日本高清免费网站| 国产免费私拍一区二区三区| 韩国日本好看电影免费看| 麻豆国产人免费人成免费视频 | 老汉色老汉首页a亚洲| 成人国产mv免费视频| 国内大片在线免费看| 日韩免费a级在线观看| 国产女高清在线看免费观看| 久久国产精品成人片免费| 最近中文字幕电影大全免费版| 8888四色奇米在线观看免费看| 亚洲一区二区三区免费视频|