日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

JAVA——基于HttpClient的通过单点登录方式(统一身份认证平台)登录正方教务系统[1999-2020]基本解决方案

發布時間:2024/10/5 windows 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA——基于HttpClient的通过单点登录方式(统一身份认证平台)登录正方教务系统[1999-2020]基本解决方案 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題分析

通過HttpClient獲取網頁數據源,通過Jsoup解析數據。先模擬登錄統一身份認證平臺,再通過單點登錄方式登錄正方教務系統,最后獲取相關信息。模擬瀏覽器正常操作,封裝請求頭信息獲取SESSIONID。

解決方案

Maven

<dependency><groupId>com.baidu.aip</groupId><artifactId>java-sdk</artifactId><version>4.8.0</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.2</version></dependency><dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.11.3</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.4</version></dependency><dependency><groupId>org.json</groupId><artifactId>json</artifactId><version>20160810</version></dependency><dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15on</artifactId><version>1.56</version></dependency>

?

登錄統一身份認證平臺

登錄請求表單數據?

密鑰與加密密碼均為Base64編碼

?

常見加密:

1)數據加密標準(DES Data Encryption Standard):DES(密鑰長度64位)(ECB模式)

2)分組密碼算法:AES(密鑰長度在128位及以上)(GCM或CBC模式)

3)流密碼算法:AES(密鑰長度在128位及以上)(OFB或CTR模式)、chacha20

4)哈希算法:SHA2、SHA3

5)密鑰交換算法:DSA/DH(密鑰長度2048位及以上)、ECDH(密鑰長度223及以上)

6)HMAC(基于哈希的消息驗證碼)算法:HMAC-SHA2

7)非對稱加密算法:RSA(2048位及以上)、ECC(256位以上)

DEC解密?

此統一身份認證平臺密碼加密采用DES/ECB/PKCS7Padding方式加密。

相關加密解密方法,自行百度。

參考:https://shentuzhigang.blog.csdn.net/article/details/107323907

密鑰獲取

在登錄頁面HTML代碼中可以找到?

模擬登錄

package cn.edu.zstu.myzstu.spyder.sso;import cn.edu.zstu.myzstu.model.Student; import cn.edu.zstu.myzstu.utils.DESUtil; import cn.edu.zstu.myzstu.utils.httpclient.HTTPResponse; import cn.edu.zstu.myzstu.utils.httpclient.HttpClientUtils; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.select.Elements; import org.springframework.stereotype.Component;import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;/*** @Author ShenTuZhiGang* @Version 1.0.0* @Date 2020-03-20 18:04*/ @Component public class SSOLoginer {private final String LOGIN_URL="https://sso.zstu.edu.cn/login";public boolean login(String username,String password){Document doc = Jsoup.parse(HttpClientUtils.doGetRequest(LOGIN_URL,null,null));String currentLoginType = doc.select("#current-login-type").html();String loginCroypto = doc.select("#login-croypto").html();String ssoSecond = doc.select("#sso-second").html();String userId = doc.select("#user-id").html();String userObjectId = doc.select("#user-object-id").html();String lphoneNumber = doc.select("#phone-number").html();String loginRuleType = doc.select("#login-rule-type").html();String loginPageFlowKey = doc.select("#login-page-flowkey").html();String captchaUrl = doc.select("#captcha-url").html();String redirectUri = doc.select("#redirect-uri").html();String loginBackUri = doc.select("#login-back-uri").html();String loginErrorCode = doc.select("#login-error-code").html();String recaptchaInvisible = doc.select("#recaptcha-invisible").html();Map<String,String> params=new HashMap<>();params.put("username",username);params.put("type",currentLoginType);params.put("_eventId","submit");params.put("geolocation","");params.put("execution",loginPageFlowKey);params.put("captcha_code","");params.put("croypto",loginCroypto);params.put("password", DESUtil.encrypt(loginCroypto,password));HTTPResponse httpResponse = HttpClientUtils.doPostRequest(LOGIN_URL, null, params);System.out.println(loginCroypto);System.out.println(DESUtil.encrypt(loginCroypto,password));System.out.println(httpResponse);return true;} }

注:HttpClient封裝工具類,自行百度。

參考:https://shentuzhigang.blog.csdn.net/article/details/104274609

登錄正方教務系統

單點登錄抓包?

單點登錄

package cn.edu.zstu.myzstu.spyder.edu;import cn.edu.zstu.myzstu.spyder.sso.SSOLoginer; import cn.edu.zstu.myzstu.utils.httpclient.HttpClientUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component;import java.util.ArrayList; import java.util.List;/*** @Author ShenTuZhiGang* @Version 1.0.0* @Date 2020-07-13 23:36*/ @Component public class EduSSOLoginer {@Autowiredprivate SSOLoginer ssoLoginer=new SSOLoginer();public boolean login(String username,String password){if(ssoLoginer.login(username,password)){String location= HttpClientUtils.doGetRequest("https://sso.1.edu.cn/login?service=http%3A%2F%2Fjw.1.edu.cn%2Fsso%2Fjasiglogin",null,null);int i;List<String> list = new ArrayList<>();for(i=0 ;i<6;i++){//如果是重定向,則繼續請求。if(location.contains("http")&&location.length()<150){list.add(location);location = HttpClientUtils.doGetRequest(location,null,null);}else{break;}}System.out.println(i);for (String str:list) {System.out.println(str);}return true;}return false;} }

測試

@Testpublic void Gradetest4() throws Exception {System.out.println("Gradetest4");EduSpyder eduSpyder = new EduSpyder();EduSSOLoginer eduSSOLoginer = new EduSSOLoginer();GradeParser gradeParser = new GradeParser();List<Grade> data = null;try {if(eduSSOLoginer.login("username","password")) {data = gradeParser.parse(eduSpyder.crawlGrades(new Student()));}} catch (Exception e) {throw e;}List<Grade> scoreList= data;for(Grade score:scoreList){System.out.println(score);}System.out.println(scoreList.size());} //獲取成績信息頁面public String crawlGrades(Student stu) {Map<String,String>scoreParams=new HashMap<>();scoreParams.put("xnm","");scoreParams.put("xqm","");scoreParams.put("_search","false");scoreParams.put("nd",""+new Date().getTime());scoreParams.put("queryModel.showCount","100");scoreParams.put("queryModel.currentPage","1");scoreParams.put("queryModel.sortName","");scoreParams.put("queryModel.sortOrder","asc");scoreParams.put("time","1");try {String scoreResponse = HttpClientUtils.doPostRequest(CHECK_GRADE_URL,null,scoreParams).getContent();return scoreResponse;}catch (Exception e){e.printStackTrace();}return null;}

?注:成績頁面解析與成績類等,自行編寫。

參考:https://shentuzhigang.blog.csdn.net/article/details/104262854

運行結果

參考文章

https://shentuzhigang.blog.csdn.net/article/details/107323907

https://shentuzhigang.blog.csdn.net/article/details/103996741

https://shentuzhigang.blog.csdn.net/article/details/104262854

總結

以上是生活随笔為你收集整理的JAVA——基于HttpClient的通过单点登录方式(统一身份认证平台)登录正方教务系统[1999-2020]基本解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。