Hi
I'm a newbie to jsecurity so I might be missing something in my config here.
My authentication is happening fine, but when I try to do a role check I get
a java.util.NoSuchElementException. Let me explain my config -
I've made a new Realm called HibernateSecurityRealm and have implemented the
doGetAuthenticationInfo
doGetAuthorizationInfo
methods. Here's the implementation code snippet
--- code start ---
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken
token) throws AuthenticationException {
UsernamePasswordToken upToken = (UsernamePasswordToken) token;
String username = upToken.getUsername();
// Null username is invalid
if (username == null) {
throw new AccountException("Null usernames are not allowed by this
realm.");
}
String password = userSecurityDao.getPasswordForUser(username);
if (password == null) {
throw new UnknownAccountException("No account found for user [" +
username + "]");
}
return buildAuthenticationInfo(username, password.toCharArray());
}
protected AuthenticationInfo buildAuthenticationInfo(String username,
char[] password) {
return new SimpleAuthenticationInfo(username, password, getName());
}
/**
* This implementation of the interface expects the principals collection
to return a String username keyed off of
* this realm's [EMAIL PROTECTED] #getName() name}
*
* @see
AuthorizingRealm#getAuthorizationInfo(org.jsecurity.subject.PrincipalCollection)
*/
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection
principals) {
//null usernames are invalid
if (principals == null) {
throw new AuthorizationException("PrincipalCollection method argument
cannot be null.");
}
String username = (String)
principals.fromRealm(getName()).iterator().next();
// Retrieve roles and permissions from database
Set<String> roleNames = userSecurityDao.getRoleNamesForUser(username);
Set<String> permissions= userSecurityDao.getPermissions(username,
roleNames);
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(roleNames);
info.setStringPermissions(permissions);
return info;
}
--- code end ---
Now whenever I'm calling something like
getSecurityManager().login(token);
in my action. the call to doGetAuthenticationInfo is happening just fine.
But when I try to do something like
getSecurityManager().getSubject().hasRole("XYZ")
I get the NoSuchElementException exception.
Please help. Let me know if there's something more to be implemented when
creating a realm.