sso跨域写cookie的一段js脚本

13 篇文章 0 订阅
7 篇文章 0 订阅
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<script>
  var setcookitarray = "";
  setcookitarray = "[\"http://passport.a.com/main/setCookie.do?domain=\",\"http://passport.a.com/main/setCookie/main/setCookie.do?domain=.b.cn\",\"http://passport.a.com/main/setCookie/main/setCookie.do?domain=.c.com\",\"http://passport.a.com/main/setCookie/main/setCookie.do?domain=.d.cn\"]";
  setcookitarray = eval(setcookitarray); 
  var setcookitarrayln = setcookitarray.length; 
  //alert(setcookitarrayln);
  var notifyurl_list=setcookitarray;
  var ll = setcookitarrayln;
  var params="yqVg1ennsNnxydEq4azcAP6TjhR90QCEUtB7gs45H08ltXBUNeoy_GczVyqC6cvZEwPGN0Al8XWKDsIt60YO1QsUlbK0Fip73Xz@7djs3ZmhBbAdanMbUH1Y@MVD2@@keR0S7njF5xiy@m6zaRWYNMbJ23jLDSrvEtMj0BExfYvFFe@twp3RHfD41dJOQzWz@nf8i@tJB12hNLIG4oW0eA==";
  var failuretime=2678400;
  var backurl="http://www.test.com";
  //alert("1111");
  
  loginALL(notifyurl_list, ll-1, backurl, params,failuretime);
  //alert("2222");
  function loginALL(notifyurl_list,num,backurl,params,failuretime) {
        var u = notifyurl_list[num];
		 alert("url:"+(num)+"-"+u);
        if (typeof u != "undefined") {
		    //alert("4444:"+notifyurl_list[num]);
            var url = notifyurl_list[num]+"&failuretime="+failuretime+"&val="+params;
			//alert("url:"+url);
			
			//动态生成script脚本标签执行url页面
			var login=request("loginScript"+num,url);
			num--;
            if (num < 0) {
				
                window.setTimeout(function() {
                    window.location.href = backurl;
                }, 2000);
				
            }
			else
			{
				loginALL(notifyurl_list, num, backurl, params,failuretime);
			}
          
           
        }
  }
  
  
  
  function request(id,url){
     oScript = document.getElementById(id);
     var head = document.getElementsByTagName("head").item(0);
     if (oScript) {
        head.removeChild(oScript);
     }
     oScript = document.createElement("script");
     oScript.setAttribute("src", url);
     oScript.setAttribute("id",id);
     oScript.setAttribute("type","text/javascript");
     oScript.setAttribute("language","javascript");
     head.appendChild(oScript);
     return oScript;
}
  

</script>


<body>

</body>


主要通过 递归调用 和 动态创建script标签来实现页面的调用。

 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现单点登录(SSO)需要涉及多个组件,包括认证服务、授权服务、资源服务和客户端等。这里提供一个简单的 Java 实现示例,仅用于参考。 首先,需要实现认证服务。这里使用一个简单的假认证服务,将用户名和密码存储在一个 Map 中,验证用户是否合法: ```java public class AuthenticationService { private static Map<String, String> users = new HashMap<>(); static { // 添加假用户 users.put("user1", "password1"); users.put("user2", "password2"); users.put("user3", "password3"); } public boolean authenticate(String username, String password) { if (users.containsKey(username) && users.get(username).equals(password)) { return true; } return false; } } ``` 然后,需要实现授权服务,这里同样使用一个简单的假授权服务,将已登录用户和 token 存储在一个 Map 中: ```java public class AuthorizationService { private static Map<String, String> userTokens = new HashMap<>(); public String authorize(String username) { String token = UUID.randomUUID().toString(); userTokens.put(username, token); return token; } public boolean validateToken(String username, String token) { if (userTokens.containsKey(username) && userTokens.get(username).equals(token)) { return true; } return false; } } ``` 接着,需要实现资源服务,该服务需要校验用户是否已经登录并且 token 是否合法: ```java public class ResourceService { private static final String AUTH_HEADER = "Authorization"; public boolean accessResource(HttpServletRequest request) { String token = request.getHeader(AUTH_HEADER); if (token == null) { return false; } // 从token中解析用户名 String username = parseUsernameFromToken(token); if (username == null) { return false; } // 验证token是否合法 AuthorizationService authService = new AuthorizationService(); if (!authService.validateToken(username, token)) { return false; } // 验证用户是否已经登录 if (!isUserLoggedIn(username)) { return false; } // 访问资源 return true; } private String parseUsernameFromToken(String token) { // 解析用户名的逻辑 return null; } private boolean isUserLoggedIn(String username) { // 判断用户是否已经登录的逻辑 return true; } } ``` 最后,需要实现客户端,该客户端需要调用认证服务进行登录并获取 token,然后在访问资源服务时添加 Authorization 头部: ```java public class Client { private static final String AUTH_HEADER = "Authorization"; private static final String LOGIN_URL = "http://localhost:8080/login"; private static final String RESOURCE_URL = "http://localhost:8080/resource"; public static void main(String[] args) throws Exception { // 登录获取token AuthenticationService authService = new AuthenticationService(); String username = "user1"; String password = "password1"; if (authService.authenticate(username, password)) { AuthorizationService authzService = new AuthorizationService(); String token = authzService.authorize(username); // 添加Authorization

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值