1. 应用端关于ZAS配置
1.1 在应用中引入ZAS客户端文件com.zving.zas.client.jar
1.2 配置web.xml文件
1.2.1 配置zas过滤器
1.2.2 过滤器中配置常用参数
配置Client配置文件路径Client文件路径配置支持相对路径和绝对路径。其中以/或者盘符开头视为绝对路径,相对路径默认存放在应用的根目录下。
配置代理访问应用列表
功能介绍:本应用与目标应用进行通信,验证成功后,将需要的数据封装在map中发送给目标应用,目标应用接收数据并进行处理。AppID_A 目标应用AppID URL_A 调用的目标应用url。格式:AppID_A,URL_A;AppID_B,URL_B。
配置请求代理数据路径应用向目标应用发送代理访问,应用调用方法路径。
登录失败是否自动跳转到登录页boolean型,默认为true。
配置client类,默认使用com.zving.zas.client.SimpleZASClient 应用可根据需求重新实现该类,(具体参考下面文档ZASClient的实现)。
配置默认登录后的跳转页登陆成功后对跳转路径进行处理若不处理跳转到默认路径。
配置ZASFilter需要过滤的路径 可使用通配符。
2. ZASClient的实现
ZAS为用户提供个人用户登录,ip登录等多种登录方式。个人用户登录是用户注册账号进行登录,ip登录是,系统管理员在ZAS中新建机构,通过管理该机构的并发数,ip范围,使得在该ip范围内的用户可以直接通过ip进行登录,并访问应用。此外还有机构账号登录和社会化登录。
应用不适用默认的ZASClient实现类,可自己根据需求实现。实现类需继承ZASClient,重写如下方法。
public ZASUser getLoggedUser(HttpServletRequest request){}
需要进行登录操作前ZASClient首先调用getLoggdeUser方法从指定的session中获取ZAUser对象若ZAUser对象存在,则应用已经登录,不再进行再次登录操作,如果不存在则进行登录操作。
protected String loginSuccess(HttpServletRequest request, HttpServletResponse response, ZASUser user){}
应用登录成功后在loginSuccess中对会话进行注册,控制转发,以及进行必要的业务处理
其中user中封装了该登录用户的用户名等相关信息(用户名username在zas中唯一存在),返回值为应用跳转路径。可调用String referer = this.getReferer(request, true)方法获得默认的url通过对url进行分析,自行决定跳转路径,若返回值为null则默认为默认url进行重定向。
protected String logoutSuccess(HttpServletRequest request, HttpServletResponse response){}
用户在zas中退出后,zas发送请求统一将所有应用退出,应用调用logoutSuccess方法。在此方法中将该用户的会话注销,处理必要的业务逻辑,返回重定向地址。返回值为null,为默认地址。
protected boolean syncDataSuccess(Map syncData){}
同步数据方法,用户在zas注册成功或修改信息后,zas服务器会将改用户的数据同步到应用中,在该方法中,将该用户在zas的信息同步到应用的数据库中,syncData中封装了用户基本信息及referer地址等一些必要信息。逻辑处理完成后返回true,zas在用户再次修改zas用户信息前不再发送同步数据请求,返回false认为同步信息不成功。下次登录再次发送同步信息请求。
ZASClient中与机构相关的方法:
public ZASReport addBranch(ZABranch branch)添加机构。
public ZASReport updateBranch(ZABranch branch)更新机构。
public ZASReport deleteBranch(String branchInnerCode) 删除机构。其中 zas与应用中机构是以innercode识别。
public static ZASClient getInstanced()获取已实例的Client,如果未实例则返回Null。
DemoClient client = (DemoClient)ZASClient.getInstanced();获取已实例的Client,如果未实例则返回Null 。
3. ZAS客户端配置
3.1 应用配置
3.2 ZAS服务器配置
3.3 导出zas_client.config
根据下图将zas_client.config放在相应应用下目录中并在web.xml进行配置。
3.4 机构授权
3.5 同步用户和机构实例
3.5.1 用户同步
ZAS提供了由应用向zas同步用户数据的接口,逻辑如下(用户同步前需授权,具体方法参考机构授权):
ZASClient client = ZASClient.getInstanced();
//用户名,在zas中唯一存在
String UserName = request.getParameter("UserName");
//密码
String Password = request.getParameter("Password");
//电子邮件
String Email = request.getParameter("Email");
//真实姓名
String RealName = request.getParameter("RealName");
//性别 F:女 M:男
String Gender = request.getParameter("Gender");
//账号状态 E:启用 D:停用
String Status = request.getParameter("Status");
//执行操作(非zauser属性,为demo中调用增加,删除,更新提供标识)
String action = request.getParameter("action");//
Map recData = new HashMap();
ZASReport report = null;
if (UserName != null) {
ZAUser zaUser = new ZAUser();
zaUser.setUserName(UserName);
zaUser.setGender(Gender);
//将密码加密
Password = new MD5Code().getMD5ofStr(Password);
//将密码传递给zas 标注明文或者密文,true表示密文,false明文。
zaUser.setPassword(Password,true);
zaUser.setRealName(RealName);
zaUser.setStatus(Status);
zaUser.setEmail(Email);
//根据action判断执行何种操作,开发者可根据具体情况自行调用
if ("add".equals(action)) {
report = client.addUser(zaUser);
} else if ("del".equals(action)) {
report = client.delUser(UserName);
} else if ("save".equals(action)) {
report = client.updateUser(zaUser);
}
System.out.println("同步状态:"+report.getStatus());
}
3.5.2 机构同步
ZASClient client = ZASClient.getInstanced();
//新建机构的父级机构
String ParentInnerCode = request.getParameter("ParentInnerCode");
//机构编码(必填,链接zas与应用中机构对照的标识)
String InnerCode = request.getParameter("InnerCode");
//机构名称
String Name = request.getParameter("Name");
//机构状态 E:启用 D:停用
String Status = request.getParameter("Status");
//机构统一用户名
String UserName = request.getParameter("UserName");
//密码
String Password = request.getParameter("Password");
//机构管理员用户名(机构管理员必须是注册过的个人用户)
String ManagerUserName = request.getParameter("ManagerUserName");
//最多并发数(控制该机构最大在线人数 0为不限制)
String MaxOnline = request.getParameter("MaxOnline");
//ip范围
String IPRange = request.getParameter("IPRange");
String action = request.getParameter("action");
Map recData = new HashMap();
ZASReport report = null;
if (InnerCode != null) {
ZABranch zaBranch = new ZABranch();
zaBranch.setParentInnerCode(ParentInnerCode);
zaBranch.setInnerCode(InnerCode);
zaBranch.setName(Name);
zaBranch.setStatus(Status);
zaBranch.setUserName(UserName);
//将密码加密
Password = new MD5Code().getMD5ofStr(Password);
//将密码传递给zas 标注明文或者密文,true表示密文,false明文。
zaBranch.setPassword(Password,true);
zaBranch.setManagerUserName(ManagerUserName);
zaBranch.setMaxOnline((int)ZASUtil.parseLong(MaxOnline));
zaBranch.setIPRange(IPRange);
if ("add".equals(action)) {
report = client.addBranch(zaBranch);
} else if ("del".equals(action)) {
report = client.deleteBranch(InnerCode);
} else if ("save".equals(action)) {
report = client.updateBranch(zaBranch);
}
}
|
所有评论仅代表网友意见