平台登录插件开发和配置
编写自己的插件,以便在登录后执行相应的操作:
package com.bboss.application.util;
import javax.servlet.http.HttpServletRequest;
import org.apache.log4j.Logger;
import com.frameworkset.platform.security.AccessControl;
import com.frameworkset.platform.security.authentication.CheckCallBack;
import com.frameworkset.platform.security.authentication.CheckCallBackWrapper;
import com.frameworkset.platform.sysmgrcore.authenticate.UserPasswordLoginModule;
import com.frameworkset.platform.sysmgrcore.entity.Organization;
import com.frameworkset.platform.sysmgrcore.entity.User;
import com.frameworkset.platform.sysmgrcore.exception.ManagerException;
public class TicketUserPasswordLoginModule extends UserPasswordLoginModule {
private static Logger logger = Logger.getLogger(TicketUserPasswordLoginModule.class);
@Override
protected void buildCallback(CheckCallBackWrapper checkCallBack, User user,
String userName, String password, String password_i,
Organization org) throws ManagerException {
super.buildCallback(checkCallBack, user, userName, password, password_i, org);
try {
//dosomething here 业务
//获取业务信息设置到会话对象中(登录时可以在这里将登录的酒店信息设置到会话属性中)
String ticket = AppHelper.getTicket(userName, user.getUserWorknumber());
checkCallBack.setUserAttribute("ticket", ticket);
//系统中获取ticket对象的方法:
AccessControl accesscontroler = AccessControl.getAccessControl();
String ticket_ = accesscontroler.getUserAttribute("ticket");
} catch (Exception e) {
logger.error(e);
}
}
/**
* 重置用户属性
* 业务中使用方法:AccessControl.getAccessControl().resetUserAttribute("hotelcode");
*/
@Override
public void resetUserAttribute(HttpServletRequest request,
CheckCallBack checkCallBack, String userAttribute) {
String userName = (String)checkCallBack.getUserAttribute("userAccount");
String userAttributevalue = "";//........;//获取最新的属性值
checkCallBack.setUserAttribute(userAttribute, userAttributevalue);//更新属性值
// TODO Auto-generated method stub
//super.resetUserAttribute(request, checkCallBack, userAttribute);
}
/**
* 更新用户会话属性,酒店切换时可以调用下面的方法更新登录的酒店信息:
* 业务中调用方法:AccessControl.getAccessControl().resetUserAttributes();
*/
@Override
public void resetUserAttributes(HttpServletRequest request,
CheckCallBack checkCallBack) {
//根据需要更新属性值
try {
String userName = (String)checkCallBack.getUserAttribute("userAccount");
String userWorknumber = (String)checkCallBack.getUserAttribute("userWorknumber");
String ticket = AppHelper.getTicket(userName, userWorknumber);
checkCallBack.setUserAttribute("ticket", ticket);
} catch (Exception e) {
logger.error(e);
}
}
}
写好自己的登录插件后,就可以修改文件resources/config-manager.xml的内容:
<loginModule name="console" controlFlag="required" debug="true" registTable="DB" class="com.frameworkset.platform.sysmgrcore.authenticate.UserPasswordLoginModule" />
为:
<loginModule name="console" controlFlag="required" debug="true" registTable="DB" class="com.bboss.application.util.TicketUserPasswordLoginModule" />
即可。
备注
平台后台java程序中获取当前登录用户会话对象及用户属性方法:
com.frameworkset.platform.security.AccessControl accesscontroler = com.frameworkset.platform.security.AccessControl.getAccessControl();
String userID = accesscontroler.getUserID();//获取用户id
String userName = accesscontroler.getUserName();//获取用户中文名
accesscontroler.getUserAttribute(userAttribute)
String worknumber = accesscontroler.getUserAttribute("userWorknumber");//获取用户工号
String fullorgjob = accesscontroler.getUserAttribute("fullorgjob");//获取用户带层级的机构岗位信息
String orgjob = accesscontroler.getUserAttribute("orgjob");//获取用户直属机构岗位信息
accesscontroler.getUserAttribute能够获取到的所有默认属性清单:
userName:用户真实名称
userID:用户id
logincount:登录次数
userAccount:用户帐号
remark1:备注1
remark2:备注2
remark3:备注3
remark4:备注4
remark5:备注5
userAddress:地址
userEmail:邮箱
userFax:传真
userHometel:家庭电话
userIdcard:身份证
userMobiletel1:手机1
userMobiletel2:手机2
userOicq:oicq
userPinyin:用户名拼音
userPostalcode:邮编
userSex:性别
userType:用户类型
userWorknumber:工号
userWorktel:工作电话
userBirthday:生日
userRegdate:注册日期
userSn:用户排序号
userIsvalid:用户是否有效
orgjob:用户直属机构岗位信息
fullorgjob:用户带层级的机构岗位信息
CHARGEORGID:com.frameworkset.platform.sysmgrcore.entity.Organization用户所属机构对象
同时系统可以扩展自己的用户loginmodule,在buildCallback方法中添加自己的用户属性。
bboss为了方便系统在jsp页面上获取当前用户的会话属性,特意定义了一个accesscontrol标签,使用方法如下:
先在jsp头部导入标签:
<%@ taglib uri="/WEB-INF/sany-taglib.tld" prefix="sany"%>
接着就可以使用标签了:
<sany:accesscontrol userattribute="userName"/>
<sany:accesscontrol userattribute="userAccount"/>
<sany:accesscontrol userattribute="orgjob"/>
检查资源操作权限的方法:
boolean hasaddpermission = accesscontroler.checkPermission("testid",//资源id
"add",//资源操作
"testresource"//资源类型
);
boolean hasupdatepermission = accesscontroler.checkPermission("testid","write","testresource");
boolean hasdeletepermission = accesscontroler.checkPermission("testid","delete","testresource");
boolean hasreadpermission = accesscontroler.checkPermission("testid","read","testresource");
boolean hasglobaltestreadpermission = accesscontroler.checkPermission("globaltest","read","testresource");
boolean hasglobaltestdeletepermission = accesscontroler.checkPermission("globaltest","delete","testresource");