javaweb關於兩個項目session傳遞以及不同項目之間頁面傳值的總結

來源:互聯網
上載者:User

項目中業務系統和一個cms系統要做session共用,此為個人工作中的總結,算不算SSO我也不知道,我要的是實現功能。
項目A和項目B是tomcat下兩個不同的項目,項目A是業務系統,項目B是cms系統,要實現的目標是 A登入進來 跳轉到B B擷取到A的session資訊
因為A登入後在A的struts.xml不能直接跳轉到B的頁面,所以在A裡面加了jsp頁面(在此頁面中實現跳轉到B頁面),跳轉到此頁面。
在此jsp頁裡擷取到session的資訊後通過c:redirect 加參數進行傳參,把session裡需要的資訊分別傳過去:
<c:redirect url='http://localhost:8080/項目B/XXX.html'>
<c:param name="orgName" value="<%=sessionDto.getOrgName()%>"></c:param>
<c:param name="deptName" value="<%=sessionDto.getDeptName()%>"></c:param>
<c:param name="personName" value="<%=sessionDto.getPersonName()%>"></c:param>
</c:redirect>
在B的頁面裡通過擷取url的路徑和參數得到傳過來的url字串,這裡要注意,前面傳過來的參數如果是中文 擷取到的參數會是類似%e9%9b%86%e5%9b%a2%e6%9c%ac%e9%83%a8的亂碼,
必須通過decodeURI()方法轉碼。

現在跳轉到B的頁面了,下面實現擷取A的session資訊:
首先在tomcat server.xml  </Host>標籤下 配置:
<Context docBase="..\webapps\項目A" path="/A"  reloadable="true" crossContext="true" />
<Context docBase="..\webapps\項目B" path="/B"  reloadable="true" crossContext="true"/>
在A的登入action裡:
HttpSession session2 = request.getSession();
session2.setAttribute("sessionDto",A的session資訊);
ServletContext ContextA =session2.getServletContext();
ContextA.setAttribute("session", session2);

在B的web-inf/web.xml裡寫一個filter過濾器:
<filter>
    <filter-name>sessionFilter</filter-name>
    <filter-class>com.XXX.util.sessionFilter</filter-class>
   </filter>
   <filter-mapping>
     <filter-name>sessionFilter</filter-name>
     <url-pattern>/*</url-pattern>
 </filter-mapping>
用於在跳轉到B時 任何時候都能擷取到A的session。
 在doFilter方法裡:
  HttpSession session =request.getSession();
  ServletContext Context = session.getServletContext();
  ServletContext Context1= Context.getContext("/項目A"); 
  if(Context1 !=null && !Context1.equals("")){ 
   HttpSession session1 =(HttpSession)Context1.getAttribute("session");
   request.setAttribute("sessionDto", session1.getAttribute("sessionDto"));
   }


由於在B的html頁面裡要擷取到A的菜單許可權,所以在B的頁面裡通過iframe的方式調B裡面的一個jsp頁,這個jsp頁專門用來擷取菜單許可權,
<iframe height="100" width="100" id="getSessionIframe" src="http://localhost:8080/項目A/pages/login/getSession.jsp" style="display:none;"></iframe>
在B的html頁裡擷取iframe頁裡的值:
var userId=frames['getSessionIframe'].document.getElementById("userid").value;
這樣就把A的菜單許可權也擷取到了

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.