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

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

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

    Struts2 action 的 ;jsessionid=xxx 使找不到頁(yè)面 Bug 的解決 [轉(zhuǎn)帖]

    原文地址
    自己留個(gè)地址,遇到這個(gè)問(wèn)題可以考慮使用。不過(guò)要重新編譯struts2的jar包確實(shí)比較。。。

    剛剛又找到一個(gè)解決辦法:

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

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

    要解決這個(gè)問(wèn)題必須關(guān)閉struts的自動(dòng)Locale的功能,不過(guò)很簡(jiǎn)單,只用在struts-config.xml的controller配置增加一個(gè)locale參數(shù)值等于false即可,如:

    <controller locale="false"/>


    上述辦法貌似針對(duì)的是Struts1的。又去搜索了一下?;蛟S可以用一下方案:
    通過(guò)加入 Filter 的方式過(guò)濾掉 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 閱讀(3786) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): JAVA

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

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(2)

    隨筆分類(lèi)

    隨筆檔案

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 一级特级aaaa毛片免费观看| 俄罗斯极品美女毛片免费播放| 国产成人亚洲精品蜜芽影院| 亚洲男人天堂2017| 亚洲国产一区二区a毛片| 免费女人18毛片a级毛片视频| 亚洲av最新在线观看网址| 久久嫩草影院免费看夜色| 思思久久99热免费精品6| 国产亚洲蜜芽精品久久| a级片免费在线观看| 亚洲性久久久影院| 亚洲av永久无码精品秋霞电影秋 | 免费能直接在线观看黄的视频| 四虎永久在线精品免费影视| 亚洲国产成人精品无码一区二区 | 免费播放国产性色生活片| 亚洲精品在线免费观看| 亚洲伊人久久大香线蕉苏妲己| 男女一边摸一边做爽的免费视频| 人妻视频一区二区三区免费| 国产精品亚洲产品一区二区三区 | a级毛片高清免费视频就| 免费精品一区二区三区在线观看| 亚洲视频在线观看| 免费日本一区二区| 亚洲色偷偷av男人的天堂| 一区二区三区四区免费视频 | 亚洲成人网在线观看| 19禁啪啪无遮挡免费网站| 日木av无码专区亚洲av毛片| 你懂的免费在线观看网站| 久久精品国产亚洲精品| 久久久免费观成人影院| 亚洲国产精品国自产电影| 毛片a级毛片免费观看品善网| 亚洲av日韩av永久在线观看 | 亚洲精品无码鲁网中文电影| 黄色毛片视频免费| 亚洲人成人一区二区三区| 丁香花免费完整高清观看|