Jive授权部分 Authorization
授权部分使用了抽象工厂模式
1.首先定义了Authorzation的接口,返回userid
public interface Authorization{
public int getUserID();
}
2.定义抽象工厂类,来生产Authorization工厂
public abstract class AuthorizationFactory{
private static String className =
"com.Yasna.forum.database.DbAuthorizationFactory";
private static AuthorizationFactory factory = null;
public static Authorization getAuthorization(String username, String password)
throws UnauthorizationException{
loadAuthorizationFactory();
return factory.createAuthorization(username,password);
}
public static Authorization getAnonymousAuthorization(){
loadAuthorizationFactory();
return factory.createAnonymousAuthorization();
}
//对指定用户授权
public abstract Authorization createAuthorization(String username,String password)
throws UnauthorizationException;
//对匿名用户授权
public abstract Authorization create AnonymousAuthorization();
private static void loadAuthorizationFactory(){
//这个部分实现了生产工厂的过程
if(factory == null){
synchronized(className){
if(factory == null){
String classNameProp = PropertyManager.getProperty(
"AuthorizationFactory.className");
if(classNameProp != null){
classNameProp = className;
}
try{
Class c = Class.forName(className);
factory = (AuthorizationFactory)c.newInstance();
}catch(Exception e){
System.err.println("Exception loading class: " + className;
e.printStackTrace();
}
}
}
}
}
}
3. 以上就是Authorization抽象工厂的框架,下面是实现部分
Jive默认使用数据库系统做为底层的支持,如果采用其他存储方式,
可以自行编写实现,而不用修改框架,哈哈,面向接口的好处!
DbAuthorization的实现很简单,只是传递了一个userid
public class DbAuthorization implements Authorization{
private int userID;
public DbAuthorization(int userID){
this.userID = userID;
}
public int getUserID(){
reutrun userID;
}
}
4.具体工厂的实现,默认基于数据库存储方式的实现
DbAuthorizationFacotry类继承了AuthorizationFacotry
实现了createAnonymousAuthorization()和
createAuthorization(String username, String password)
授权用户的实现过程就是根据username和password来select出userid
而对于匿名用户一律返回-1