国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

單點登錄SSO(同父域實現)

2019-11-08 02:09:17
字體:
來源:轉載
供稿:網友

1.同父域單點登錄實現流程

這里寫圖片描述 備:在.x.com這個域中有三個服務器,dome1項目和dome2項目,包括一個校驗chekck,實現在不同的項目中單點登錄

2.使用不同包和路徑模擬三個服務器

這里寫圖片描述這里寫圖片描述

3.統一登錄接口(login.jsp

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>dome1和dome2的統一登錄接口</title></head><body> <center> <h1>統一登錄</h1> <!-- action這里請求的是一個校驗服務器接口,因為屬于不同服務器,所以需要全路徑 --> <form action="http://check.x.com/doLogin.action" method="post"> <span>用戶名:</span> <input type="text" name="username"/> <span>密碼:</span> <input type="passWord" name="password"/> <!--隱藏表單,用于保存我們要跳轉的頁面 --> <input type="hidden" name="getUrl" value="${getUrl}"/> <input type="submit" value="登錄"/> </form> </center></body></html>

4.登錄Action(SSOAction.java)

package check.x.com;import java.io.IOException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletResponse;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;import check.x.com.util.SSOCheck;/* * cookie的校驗服務器 */public class SSOAction extends ActionSupport { PRivate String username; private String password; private String getUrl; public String getGetUrl() { return getUrl; } public void setGetUrl(String getUrl) { this.getUrl = getUrl; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } //發送cookiename 和cookievalue過去校驗 private String cookieName; private String cookieValue; public String getCookieName() { return cookieName; } public void setCookieName(String cookieName) { this.cookieName = cookieName; } public String getCookieValue() { return cookieValue; } public void setCookieValue(String cookieValue) { this.cookieValue = cookieValue; } /* * doLogin */ public String doLogin() { boolean flag = SSOCheck.isLogin(username, password); if(flag) { Cookie cookie = new Cookie("ssocookie","sso"); //因為現在是在不同的域,所以需要把cookie設置到頂級中 cookie.setDomain(".x.com");//主要 cookie.setPath("/"); HttpServletResponse response = ServletActionContext.getResponse(); response.addCookie(cookie); return SUCCESS; } return null; } /* * 用于別的域校驗cookie */ public void check() throws IOException { boolean flag = SSOCheck.isCookie(cookieName, cookieValue); String result = "0";//保存cookie是否校驗成功 if(flag) { result = "1";//成功 } HttpServletResponse response = ServletActionContext.getResponse(); response.getWriter().print(result);//吧校驗結果發送到客戶端 response.getWriter().close(); }}

5.工具類(SSOCheck.java)包括登錄驗證和校驗接口

package check.x.com.util;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletRequest;/* * 工具 */public class SSOCheck { private static final String USERNAME = "zhangying"; private static final String PASSWORD = "123"; public static boolean isLogin(String username,String password) { if(username.equals(USERNAME) && password.equals(PASSWORD)) return true; return false; } /* * 用于校驗cookie */ public static boolean isCookie(String cookieName,String cookieValue) { //直接校驗 if(cookieName.equals("ssocookie") && cookieValue.equals("sso")) { return true; } return false; }}

6.DOME1和DOME2的主頁(index1.jsp index2.jsp)

index1.jsp<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>歡迎訪問dome1</title></head><body> <h1>這里時dome1的主頁</h1></body></html>index2.jsp<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>歡迎訪問dome2</title></head><body> <h1>這里時dome2的主頁</h1></body></html>

7..DOME1和DOME2的Action(DOME1.java DOME2.java)

DOME1.javapackage dome1.x.com;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletRequest;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;import dome1.x.com.util.DOME1Tool;public class DOME1 extends ActionSupport { private String getUrl; /* * dome1 */ public String main() { HttpServletRequest request = ServletActionContext.getRequest(); //獲取cookie Cookie[] cookies = request.getCookies(); if(cookies!=null) { for(Cookie c:cookies) { if(c.getName().equals("ssocookie")) { //url是校驗服務器的地址 String result = DOME1Tool.doGet("http://check.x.com/check.action", c.getName(), c.getValue()); if(result.equals("1"))//存在cookie { return SUCCESS; } } } } getUrl = "http://dome1.x.com/main.action";//請求后需要回來的這個域 return LOGIN; }}DOME2.javapackage dome2.x.com;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletRequest;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;import dome2.x.com.util.DOME2Tool;public class DOME2 extends ActionSupport { private String getUrl; /* * dome1 */ public String main() { HttpServletRequest request = ServletActionContext.getRequest(); //獲取cookie Cookie[] cookies = request.getCookies(); if(cookies!=null) { for(Cookie c:cookies) { if(c.getName().equals("ssocookie")) { //url是校驗服務器的地址 String result = DOME2Tool.doGet("http://check.x.com/check.action", c.getName(), c.getValue()); if(result.equals("1"))//存在cookie { return SUCCESS; } } } } getUrl = "http://dome2.x.com/main.action";//請求后需要回來的這個域 return LOGIN; }}

8.DOME1和DOME2的工具(DOME1Tool.java DOME2Tool.java)

DOME1Tool.javapackage dome1.x.com.util;import java.awt.image.BufferStrategy;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;import org.xml.sax.InputSource;import antlr.InputBuffer;/* * dome1的工具 */public class DOME1Tool { /* * 用于dome1向校驗服務器通信 */ public static String doGet(String url,String cookieName,String cookieValue) { StringBuffer sb = new StringBuffer(); HttpURLConnection httpURLConnection = null; try{ URL urls = new URL(url+"?cookieName="+cookieName+"&cookieValue="+cookieValue); httpURLConnection = (HttpURLConnection) urls.openConnection();//打開通信 httpURLConnection.setRequestMethod("GET");//設置通信方式 httpURLConnection.connect();//開始通信 InputStream is = httpURLConnection.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String temp = null; while((temp=br.readLine())!=null) { sb.append(temp); } br.close(); isr.close(); is.close(); }catch (IOException e) { e.printStackTrace(); }finally{ if(httpURLConnection!=null) { httpURLConnection.disconnect();//關閉通信 } } return sb.toString(); }}DOME2Tool.javapackage dome2.x.com.util;import java.awt.image.BufferStrategy;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;import org.xml.sax.InputSource;import antlr.InputBuffer;/* * dome1的工具 */public class DOME2Tool { /* * 用于dome1向校驗服務器通信 */ public static String doGet(String url,String cookieName,String cookieValue) { StringBuffer sb = new StringBuffer(); HttpURLConnection httpURLConnection = null; try{ URL urls = new URL(url+"?cookieName="+cookieName+"&cookieValue="+cookieValue); httpURLConnection = (HttpURLConnection) urls.openConnection();//打開通信 httpURLConnection.setRequestMethod("GET");//設置通信方式 httpURLConnection.connect();//開始通信 InputStream is = httpURLConnection.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String temp = null; while((temp=br.readLine())!=null) { sb.append(temp); } br.close(); isr.close(); is.close(); }catch (IOException e) { e.printStackTrace(); }finally{ if(httpURLConnection!=null) { httpURLConnection.disconnect();//關閉通信 } } return sb.toString(); }}

9.struts.xml中的配置(struts.xml)

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"><struts> <package name="sso" extends="struts-default" namespace="/"> <action name="doLogin" class="check.x.com.SSOAction" method="doLogin"> <!-- type設置為請求轉發,轉發到我們要跳轉的頁面 --> <result name="success" type="redirect">${getUrl}</result> </action> <!-- 配置校驗服務器的校驗 --> <action name="check" class="check.x.com.SSOAction" method="check"></action> </package> <package name="dome1" extends="struts-default" namespace="/"> <action name="dome1" class="dome1.x.com.DOME1" method="main"> <result name="success">/index1.jsp</result> <result name="login">/login.jsp</result> </action> </package> <package name="dome2" extends="struts-default" namespace="/"> <action name="dome2" class="dome2.x.com.DOME2" method="main"> <result name="success">/index2.jsp</result> <result name="login">/login.jsp</result> </action> </package></struts>

10.測試

訪問:http://dome1.x.com/main.action http://dome2.x.com/main.action

在沒有登錄之前,他們都會跳轉到登錄頁面 只要在其中一個登錄成功后,再刷新第二個項目便不需要登錄了


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大石桥市| 色达县| 南城县| 奎屯市| 桐柏县| 岳阳市| 商洛市| 郎溪县| 阿拉善右旗| 绥中县| 涞源县| 娄烦县| 佳木斯市| 襄垣县| 宁强县| 资源县| 淮南市| 固安县| 江达县| 梅河口市| 屏东市| 长葛市| 山阳县| 林周县| 汾西县| 电白县| 祥云县| 探索| 太仓市| 滨海县| 沙坪坝区| 永春县| 资溪县| 曲周县| 高要市| 伽师县| 阜平县| 磐石市| 绥滨县| 周至县| 清镇市|