Wednesday, April 8, 2009

Simple Subject & Principals Example

Seperti telah disebutkan dalam JAAS Overview, Subject merepresentasikan user. Sedangkan Subject sendiri terdiri dari beberapa Principal. Dan principal merepresentasikan identity atau role.

Berikut ini kita mempunyai user yang akan mempunyai salah satu dari role "User" atau "SysAdmin". Kedua role tersebut masing-masing diimplementasikan menjadi sebuah principal, yaitu UserPrincipal dan SysAdminPrincipal. Berikut adalah kode untuk masing-masing principal :

public class SysAdminPrincipal implements Principal, Serializable{
private String name;

public SysAdminPrincipal(String name) {
super();
this.name = name;
}

public String getName() {
return name;
}

public boolean equals(Object obj) {
if (!(obj instanceof SysAdminPrincipal)) {
return false;
}
SysAdminPrincipal other = (SysAdminPrincipal) obj;
return getName().equals(other.getName());
}

public int hashCode() {
return getName().hashCode();
}

public String toString() {
return "(SysAdminPrincipal: name=" + getName() + ")";
}
}

public class UserPrincipal implements Principal, Serializable {
private String name;

public UserPrincipal(String name) {
super();
this.name = name;
}

public String getName() {
return name;
}

public boolean equals(Object obj) {
if (!(obj instanceof UserPrincipal)) {
return false;
}
UserPrincipal other = (UserPrincipal) obj;
return getName().equals(other.getName());
}

public int hashCode() {
return getName().hashCode();
}

public String toString() {
return "(UserPrincipal: name=" + getName() + ")";
}
}

masing - masing principal mempunyai variabel name untuk menyimpan nama user.

Bagaimana mengasosiasikan principal dengan Subject? JAAS mempunyai sebuah interface LoginModule dan method LoginModule.commit() bisa digunakan untuk tujuan ini :

public boolean commit() throws LoginException {
if ("scott".equals(name)) {
Principal p = new SysAdminPrincipal(name);
subject.getPrincipals().add(p);
return true;
} else if ("matt".equals(name)) {
Principal p = new UserPrincipal(name);
subject.getPrincipals().add(p);
return true;
} else {
return false;
}
}

di sini terlihat user scott mempunyai principal SysAdminPrincipal dan user matt mempunyai principal UserPrincipal.

0 comments:

 

©2009 Stay the Same | by TNB