鍍金池/ 問答/Java  HTML/ jquery load方法導(dǎo)致cookie失效的問題:Session alrea

jquery load方法導(dǎo)致cookie失效的問題:Session already invalidated

需要免登陸進入頁面"${ctx}/target/page"
寫了一個jsp文件如下:

<head>
  <script>
    $(document).ready(function () {
        $("#mainForm").submit();
        $("#mainForm").hide();

        //這里試了好幾個方法,都不行
        //$("body").load("${ctx}/target/page");  //1
        //$(location).attr('href', "${ctx}/target/page");  //2
        $("mainFrame").attr('href', "${ctx}/target/page"); //3
        
    });
  </script>
</head>

<body>
  <iframe name="mainFrame" width="100%" height="100%" id="mainFrame"></iframe>
  <div>
   <form target="mainFrame" action="${ctx}/login" method="post" id="mainForm">
    <input type="hidden" id="username" name="username" value="xiaohong">
    <input type="hidden" id="password" name="password" value="hj8pw">
   </form>
  </div>
<body>

其中如果1,2,3三行代碼不用,頁面自動進入主界面,然后有一個連接指向"${ctx}/target/page",點擊就能進到頁面,現(xiàn)在我上面的頁面想讓其自動進入這個頁面,結(jié)果發(fā)現(xiàn)不行,其中1,2偶爾能進去目標(biāo)頁面,但是大多數(shù)時候,session id 的cookie被沖刷替換掉了,導(dǎo)致訪問失敗,

后臺報錯:
2017-12-28 19:17:17,173 [http-apr-8080-exec-5] ERROR [500.jsp] - java.lang.IllegalStateException: getAttribute: Session already invalidated
org.apache.shiro.session.InvalidSessionException: java.lang.IllegalStateException: getAttribute: Session already invalidated

at org.apache.shiro.web.session.HttpServletSession.getAttribute(HttpServletSession.java:148)
at org.apache.shiro.session.ProxiedSession.getAttribute(ProxiedSession.java:121)
at org.apache.shiro.session.ProxiedSession.getAttribute(ProxiedSession.java:121)
at org.apache.shiro.subject.support.DelegatingSubject.getRunAsPrincipalsStack(DelegatingSubject.java:469)
at org.apache.shiro.subject.support.DelegatingSubject.isRunAs(DelegatingSubject.java:441)
at org.apache.shiro.mgt.DefaultSubjectDAO.mergePrincipals(DefaultSubjectDAO.java:187)
at org.apache.shiro.mgt.DefaultSubjectDAO.saveToSession(DefaultSubjectDAO.java:166)
at org.apache.shiro.mgt.DefaultSubjectDAO.save(DefaultSubjectDAO.java:147)
at org.apache.shiro.mgt.DefaultSecurityManager.save(DefaultSecurityManager.java:383)
at org.apache.shiro.mgt.DefaultSecurityManager.createSubject(DefaultSecurityManager.java:350)
at org.apache.shiro.mgt.DefaultSecurityManager.createSubject(DefaultSecurityManager.java:183)
at org.apache.shiro.mgt.DefaultSecurityManager.login(DefaultSecurityManager.java:283)
at org.apache.shiro.subject.support.DelegatingSubject.login(DelegatingSubject.java:256)
at org.apache.shiro.web.filter.authc.AuthenticatingFilter.executeLogin(AuthenticatingFilter.java:53)
at org.apache.shiro.web.filter.authc.FormAuthenticationFilter.onAccessDenied(FormAuthenticationFilter.java:154)
at org.apache.shiro.web.filter.AccessControlFilter.onAccessDenied(AccessControlFilter.java:133)
at org.apache.shiro.web.filter.AccessControlFilter.onPreHandle(AccessControlFilter.java:162)
at org.apache.shiro.web.filter.PathMatchingFilter.isFilterChainContinued(PathMatchingFilter.java:203)
at org.apache.shiro.web.filter.PathMatchingFilter.preHandle(PathMatchingFilter.java:178)
at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:131)
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)
at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383)
at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.orm.hibernate4.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:150)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:617)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:668)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2463)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2452)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)

Caused by: java.lang.IllegalStateException: getAttribute: Session already invalidated

at org.apache.catalina.session.StandardSession.getAttribute(StandardSession.java:1204)
at org.apache.catalina.session.StandardSessionFacade.getAttribute(StandardSessionFacade.java:108)
at org.apache.shiro.web.session.HttpServletSession.getAttribute(HttpServletSession.java:146)
... 56 more



而3則是停留在主界面

怎么回事啊?

回答
編輯回答
涼心人

submit是需要時間,如果服務(wù)器端還沒有完成相應(yīng)的請求,這時候訪問受session保護頁面,肯定是沒有的,你可以試試ajax方式,在seccess時再執(zhí)行頁面加載, 或都簡單用setTimeout進行延時請求試試.

2017年3月31日 20:49
編輯回答
我以為

我的判斷是submit方法會導(dǎo)致頁面刷新,然后頁面不斷重復(fù)提交導(dǎo)致問題。

你的最終目的是什么呢?如果你是要做模擬登錄,建議用selenium

2017年3月31日 01:44