技术开发 频道

Sametime,我如何获取你的Token


4、通过用户登录后,得到该用户的Token。

    使用Sametime API的StComm.jar包当中的相关方法我们得到了Token,这种方式仍然需要提供用户名和密码,只不过不会在客户的HTML源代码当中出现,而在服务器端执行,在客户端HTML代码当中的看到的仅仅是Token.

完整代码如下:
(需要StComm.jar包支持)
import com.lotus.sametime.community.*; import com.lotus.sametime.core.comparch.STSession; import com.lotus.sametime.token.*; /** *实现Token的监听期,服务器通过这种方式反馈Token */ public class Tokens implements LoginListener,TokenServiceListener{ private String _loginname; //记录用户登录名 例如:zhangshan private String _password;//记录用户的密码 private String _host;//Sametime的服务器地址 //登录用户的全称,例如 uid=zhangshan,cn=users,dc=your.com,dc=com private String _fullUsername; private String _token;//生成的Token private STSession m_session; //和Sametime服务器连接创建的session private CommunityService m_comm; //和Sametime CommunityService构建的连接 private TokenService m_token; //Sametime TokenService服务 private String errors; private boolean success; private boolean stop; public Tokens(String host) { _host=host; stop=false; success=false; } //用户登录 public void login(String loginname,String password) throws Exception { login(loginname,password,10); } //用户登录 public void login(String loginname,String password,int waitSeconds) throws Exception { _loginname=loginname; _password=password; m_session = new STSession(loginname); //创建一个与Sametime通讯的session m_session.start(); //通讯启用 m_comm=new STBase(m_session); m_token=new TokenComp(m_session); //增加TokensService监听器,监听Token反馈的信息 m_token.addTokenServiceListener(this); int i=0; //侦听用户的登录情况 m_comm.addLoginListener(this);//增加登录的监听器,监听是否登录成功 //用户登录 m_comm.loginByPassword(_host,_loginname,_password); //用户登录动作 try { while(!stop) { Thread.sleep(50); //waitSecond秒钟不能完成登录,自动退出. if(i++*50>=waitSeconds*1000){ stop=true; success=false; } } } catch(Exception e) { e.printStackTrace(); } m_comm.logout(); m_session.stop(); m_session.unloadSession();//释放资源 if(!success) { throw new Exception("生成Token异常!"); } } public void loggedIn(LoginEvent arg0) { try { //生成Token字符串 m_token.generateToken(); } catch(Exception e) { errors="创建token发生错误!"; e.printStackTrace(); } } /* * 用户登录注销 */ public void loggedOut(LoginEvent event) { if(event.getReason()==0) { success=true; } else { System.out.println("登录异常!"); } stop=true; } /** * 当Token生成的时候,调用该方法,得到Token **/ public void tokenGenerated(TokenEvent tokenEvent) { //获取Token的字符串及相关的用户名全称 _fullUsername=tokenEvent.getToken().getLoginName(); _token=tokenEvent.getToken().getTokenString(); success=true; //告诉程序我们获取了Token了,可以关闭循环了 stop=true; } /** * 当Token失败的时候,调用该方法,通知失败 **/ public void generateTokenFailed(TokenEvent tokenEvent) { errors="生成Token发生错误!"; stop=true; } public void serviceAvailable(TokenEvent tokenEvent) { } /** * Token生成之后,得到用户登录名全称 **/ public String getLoginName() { return _fullUsername; } /** * Token生成之后,得到用户的Token **/ public String getToken() { return _token; } }

    通过调用getLoginName()得到登录的完全用户名,以及getToken()得到Token值。

0
相关文章