僞單點登錄

單點登錄(SingleSignOn),簡稱爲SSO,是目前比較流行的企業業務整合的解決方案之一。SSO的定義是在多個應用系統中,用戶只需要登錄一次就可以訪問所有相互信任的應用系統。
        因爲開發需要,自己看了一些與單點登錄相關的資料,想要實現這個功能,不過鼓搗了幾天也沒有弄成功,後來自己另闢蹊徑利用過濾器實現了相應的功能。話不多說,代碼如下(過濾器):

 public void doFilter(ServletRequest request, ServletResponse response,
    			FilterChain chain) throws IOException, ServletException {
    		// TODO Auto-generated method stub
    		HttpServletRequest servletRequest = (HttpServletRequest) request;
    		HttpServletResponse servletResponse = (HttpServletResponse) response;
    		HttpSession session = servletRequest.getSession();
    		if (session.getAttribute("adminName") != null //登錄攔截,判斷用戶是否登錄
    				&& session.getAttribute("adminName") != "") {
    			chain.doFilter(request, response); //如果用戶已經登錄,就繼續用戶當前的請求
    			return;
    		} else {
    			String getQer = servletRequest.getQueryString();//獲取用戶請求鏈接裏面的參數,比如http://xxx.com?id=xxx這個鏈接的“id=xxx”這個參數
    			String requestUrl; //定義一個變量用戶保存用戶請求的URL
    			if (getQer == null || getQer == "") {// 如果請求參數爲空的話
    				requestUrl = servletRequest.getServletPath(); //獲取用戶請求的Url
    			} else {
    				requestUrl = servletRequest.getServletPath() + "?"
    				+ servletRequest.getQueryString();  //請求的相對url;// 請求參數
    			}
    			session.setAttribute("setRequestUrl", requestUrl);// 保存請求路徑到setRequestUrl
    			//System.out.println("我是getQer:" + getQer);
    			servletResponse.sendRedirect(servletRequest.getContextPath()
    					+ "/Admin/Login.jsp"); //跳轉到登錄頁面,讓用戶登錄
    		}
    	}

以上的代碼在獲取用戶請求路徑的同時也實現了用戶登錄過濾,防止未登錄的用戶進行一些非法操作;

接下來是登錄處理頁面的部分代碼:

	session.setAttribute("adminName", adminName);//將用戶名保存在session中
				String path = request.getContextPath();
				String basePath = request.getScheme() + "://"
						+ request.getServerName() + ":"
						+ request.getServerPort() + path;//獲得當前項目的路徑
				String getUrl = basePath
						+ session.getAttribute("setRequestUrl");//獲取剛剛保存的請求地址
				
				if (getUrl != null || getUrl != "") {  //判斷用戶的請求路徑是否爲空,如果不爲空就跳轉到該頁面
					response.sendRedirect(getUrl);
				} else {
					response.sendRedirect("Management\\index.jsp");
				}

  通過以上邏輯代碼,就可以實現單點登錄的功能了,希望給有需要的同道之人一些思路。
  ps:新人小白,若有不當之處,歡迎指教。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章