天天看點

平台登入插件開發和配置

平台登入插件開發和配置

編寫自己的插件,以便在登入後執行相應的操作:

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");