平台登入插件開發和配置
編寫自己的插件,以便在登入後執行相應的操作:
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");