个人依据标准对接文档实现的西安交通大学统一身份认证(oauth方式)的对接实现,仅供参考。
//假定系统访问地址为http://test.xjtu.edu.cn/
//以下代码应该在http://test.xjtu.edu.cn/oauth.do对应的Action中实现。
//统一身份认证平台-以下简称平台
//0000为平台分配的接入appid,后面的url地址平台认证成功后的回调地址。
XjtuOauth oauth = new XjtuOauth("0000","http://test.xjtu.edu.cn/oauthLogin.do");//
//创建重定向地址,带自定义参数的(state=abcd),登录时使用这个方法创建调转地址。
String urlWithSelfParam = oauth.makeAuthorizeUrl("abcd");
//创建重定向地址,不带自定义参数(默认state=0000)
String url = oauth.makeAuthorizeUrl();
//重定向到url地址或者urlWithSelfParam这个地址
//以下代码应该在http://test.xjtu.edu.cn/oauthLogin.do对应的Action中实现。
String code = "平台会传这个参数";//这个code在后续有用。
String userType = "平台会传这个参数";//当用户有多个身份时,会传这个参数
String employeeNo = "平台会传这个参数";//会传过来这个工号,但是这个工号不可信任,有可能被伪造
//不能信任平台传过来的employeeNo,需要用code换accesstoken、再用这个accesstoken去换用户信息。
AccessToken at = oauth.fetchAccessToken(code);
//单一身份结果(在统一身份认证处用户自己选择身份)
UserInfoOnlyOneType userInfo = oauth.fetchUserInfoOnlyOneType(at.getAccessToken(), userType);
System.out.println("工号="+userInfo.getMemberNumber());
System.out.println("netid="+userInfo.getNetid());//有些系统还在使用netid,但在目前单netid多身份场景下,netid并不合适。
System.out.println("姓名="+userInfo.getMemberName());
//获得工号后,就可以使用工号作为用户名来建立系统权限,并访问系统了。
//比如使用shiro安全框架等,或者自己用session简单实现。
//退出登录,实际应用中at.getgSessionId()的值建议保存到某个地方,比如session,redis中。
//这里只是举例说明
oauth.logout(at.getgSessionId());
可自行使用git clone代码,然后自己导入ide,自行编译。