SSO单点登录

一、单点登录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 方法


    }
  1. 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
     -->
  1. 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组的安全性(短板效应)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值