package com.hwlcn.security.mgt; import com.hwlcn.security.authc.AuthenticationException; import com.hwlcn.security.authc.AuthenticationInfo; import com.hwlcn.security.authc.AuthenticationToken; import com.hwlcn.security.authc.Authenticator; import com.hwlcn.security.authc.pam.ModularRealmAuthenticator; import com.hwlcn.security.util.LifecycleUtils; public abstract class AuthenticatingSecurityManager extends RealmSecurityManager { private Authenticator authenticator; public AuthenticatingSecurityManager() { super(); this.authenticator = new ModularRealmAuthenticator(); } public Authenticator getAuthenticator() { return authenticator; } public void setAuthenticator(Authenticator authenticator) throws IllegalArgumentException { if (authenticator == null) { String msg = "Authenticator argument cannot be null."; throw new IllegalArgumentException(msg); } this.authenticator = authenticator; } protected void afterRealmsSet() { super.afterRealmsSet(); if (this.authenticator instanceof ModularRealmAuthenticator) { ((ModularRealmAuthenticator) this.authenticator).setRealms(getRealms()); } } public AuthenticationInfo authenticate(AuthenticationToken token) throws AuthenticationException { return this.authenticator.authenticate(token); } public void destroy() { LifecycleUtils.destroy(getAuthenticator()); this.authenticator = null; super.destroy(); } }