登陆证书里起码要有登陆用户名,密码,,失效时间,每次登陆得唯一编码
数据库和类创建完后就是根据用户名和密码创建登陆凭证了。
private Certificate buildCertificate(String loginName,String password) throws Exception{
Certificate certificate=new Certificate();
certificate.setLoginName(loginName);
String passwordEncode=DESUtil.encrypt(password,Constant.PRIVATE_DES_KEY);
certificate.setPassword(passwordEncode);//passwordEncode密码加密后得,这里采用得BASE64加密方法
String token=UUID.randomUUID().toString().replace("-", "");//生成唯一编号
certificate.setToken(token);//token凭证唯一编号
long currentTime = System.currentTimeMillis() + 72 * 60 * 60 * 1000; //失效时间为72小时,当前时间加上未来72小时
certificate.setInvalidTime(new Timestamp(currentTime));
return certificate;
}
这样凭证就创建完了。
如果是多个系统,则需要创建系统得标志:
//用户登录 进行判断是否登录成功 进入400系统或者进入后台管理系统 登录失败返回登录页面
public Map<String,Object> login(String loginName, String password) {
Map<String,Object> paramMap=new HashMap<String,Object>();
String retStr="login";
String token="";
try {
List<Map<String,Object>> result=enterpriseUsersDao.getEUserIdPermit(loginName);
String loginRs=eKPDataImport.login(loginName, password);
System.out.println("************loginRs:"+loginRs);
JSONObject json = new JSONObject(loginRs);
Integer flag=Integer.valueOf(json.get("flag").toString());
//Integer flag=1;
if(flag==1){ //EKP登录成功
if(result.size()==0||result.size()==1){
token=certificateService.insertCertificateDao(loginName, password);
if(result.size()==0){
retStr="loginManagement";
}
else
if("1".equals(result.get(0).get("SystemId").toString())){
retStr="loginManagement"; //登录后台
}else{
retStr="login400"; //登录400系统标识
}
}else{
token=certificateService.insertCertificateDao(loginName, password);
retStr="loginManagement"; //登录后台标识
}
}else{
paramMap.put("target", retStr);
paramMap.put("token", token);
return paramMap;
}
} catch (RemoteException|ExceptionException e) {
paramMap.put("target", retStr);
paramMap.put("token", token);
return paramMap;
}
paramMap.put("target", retStr);
paramMap.put("token", token);
return paramMap;
}
登陆前判断标识是有效的,而不是非法的:
public boolean tokenValidation(String token){
Certificate certificate=certificateService.getCertificate(token);
if(certificate==null)
return false;
else
return true;
}
其中dao层里的语句有: