一、单点登录SSO
特点:
一处登录,处处穿梭。
分类:
1. 同域SSO:相同域名
2. 跨域SSO:域名不同
二、SSO技术分析
SSO登录--服务器和Cookie(gotoUrl保存)--查询Cookie和Cookie有效性
-->登录跳转gotoUrl。
三、同域SSO代码实现
1.编写前端登录页面
<form action="/sso/dologin.action" method="post">
用户:<input type="text" name="username"/>
密码:<input type="password" name="password"/>
<input type="hidden" name="gotoUrl" value="${gotoUrl}"/>
<input type="submit" value="登录"/>
<form>
2.编写登录类继承ActionSupport
public class SSOAction extends ActionSupport{
private String username;
private String password;
private String gotoUrl;
public String doLogin(){
if(gotoUrl==null||"".equals(gotoUrl)){
gotoUrl = "/"; // 主页
}
boolean ok = SSOCheck.checkLogin(username,password);
if(ok){
Cookie cookie=new Cookie("ssocookie","sso");
cookie.setPath("/");
HttpServletResponse response = ServletActionContext.getResponse();
response.addCookie(cookie);
return SUCCESS;
}
return ERROR;
}
// get/set 方法
}
- struts配置
<package name="sso" namespace="/sso" extends="struts-default">
<action name="doLogin" class="com.newbeedaly.sso.SSOAction" methon="doLogin">
<result name="success" type="redirect">${gotoUrl}</result>
</action>
</package>
<!-- 配置demo1和demo2 -->
<!--
success success1.jsp
success success2.jsp
login login.jsp
-->
- SSOCheck类
public class SSOCheck{
//定义username2,password2
public static boolean checkLogin(String username,String password){
if(username2.equels(username)&&passwword2.equels(passwword))return true;
return false;
}
public static boolean checkCookie(HttpServletRequest request){
Cookies[] cookies=request.getCookies();
if(cookies!=null){
for(Cookie cookie:cookies){
if(cookie.getName().equals("ssocookie")&&cookie.getValue().equals("sso")){
return true;
}
}
}
}
}
5.编写主页1和主页2
public class Demo1Action{
private String gotoUrl ="";
//get/set方法
public String main(){
HttpServletRequest request = ServletActionContext.getRequest();
if(SSOCHeck.checkCookie(request)){return SUCCESS;}
gotoUrl = "/demo1/main.action";
//struts2可以不写request.setAttribute("gotoUrl",gotoUrl);
return LOGIN;
}
}
四、同父域SSO代码实现
cookie存储在父域名下
五、不同域SSO代码实现
添加sso服务器,并在每个服务器存储Cookie
六、安全性
1.cookie的安全验证
2.SSO整个cookie组的安全性(短板效应)