[jboss-user] [Security & JAAS/JBoss] - Flushing the credential cache ==> InstanceNotFoundException

benoitx do-not-reply at jboss.com
Mon Jan 28 10:15:24 EST 2008


Hi

We're using the DatabaseServerLoginModule but for all intent, when my user decides to change its password, I would like to flush the cache.

We're using JBoss-4.0.5-GA

I'm trying to follow the code on: http://wiki.jboss.org/wiki/Wiki.jsp?page=CachingLoginCredentials

Unfortunately, I know very little about MBeans and I seem to get an InstanceNotFoundException everytime on this call:
MBeanServer server = (MBeanServer) MBeanServerFactory.findMBeanServer(null).get(0);

Why? The full code is as follows:


  |     private void flushCache(String loginId) {
  |         String domain = "jmx-console";
  |         Principal user = new SimplePrincipal(loginId);
  |         ObjectName jaasMgr;
  |         try {
  |             jaasMgr = new ObjectName("jboss.security:service=JaasSecurityManager");
  |             Object[] params = { domain, user };
  |             String[] signature = { "java.lang.String", Principal.class.getName() };
  |             MBeanServer server = (MBeanServer) MBeanServerFactory.findMBeanServer(null).get(0);
  |             server.invoke(jaasMgr, "flushAuthenticationCache", params, signature);
  |         } catch (MalformedObjectNameException e) {
  |             log.error("Cannot flush", e);
  |         } catch (NullPointerException e) {
  |             log.error("Cannot flush", e);
  |         } catch (InstanceNotFoundException e) {
  |             log.error("Cannot flush", e);
  |         } catch (MBeanException e) {
  |             log.error("Cannot flush", e);
  |         } catch (ReflectionException e) {
  |             log.error("Cannot flush", e);
  |         }
  |     }
  | 

My login-config.xml is

  | <application-policy name="atrium-security">
  | <authentication>
  |     <login-module code="org.jboss.security.auth.spi.DatabaseServerLoginModule" flag="required">
  | 	<module-option name="unauthenticatedIdentity">misterx</module-option>
  | 	<module-option name="dsJndiName">java:/AtriumDS</module-option>
  | 	<module-option name="principalsQuery">
  | 	    select PASSWORDMD5 from safemarginuser where LOGINID=? and STATE='ACT' and FAILEDLOGIN < 10
  | 	</module-option>
  | 	<module-option name="rolesQuery">
  | 	    select ROLE, 'Roles' from loginrole A, safemarginuser B where B.ID=A.USER_ID and A.CLIENT_ID=B.CLIENT_ID and B.LOGINID=?
  | 	</module-option>
  | 	<module-option name="hashAlgorithm">MD5</module-option>
  | 	<module-option name="hashEncoding">base64</module-option>
  |     </login-module>
  | </authentication>
  | </application-policy>
  | 

My jboss-service.xml (in server/default/conf) is, as far as I can tell, the original one:


  |    <!-- JAAS security manager and realm mapping -->
  |    <mbean code="org.jboss.security.plugins.JaasSecurityManagerService"
  |       name="jboss.security:service=JaasSecurityManager">
  |       <!-- A flag which indicates whether the SecurityAssociation server mode
  |       is set on service creation. This is true by default since the
  |       SecurityAssociation should be thread local for multi-threaded server
  |       operation.
  |       -->
  |       <attribute name="ServerMode">true</attribute>
  |       <attribute name="SecurityManagerClassName">org.jboss.security.plugins.JaasSecurityManager</attribute>
  |       <attribute name="DefaultUnauthenticatedPrincipal">anonymous</attribute>
  |       <!-- DefaultCacheTimeout: Specifies the default timed cache policy timeout
  |       in seconds.
  |       If you want to disable caching of security credentials, set this to 0 to
  |       force authentication to occur every time. This has no affect if the
  |       AuthenticationCacheJndiName has been changed from the default value.
  |       -->
  |       <attribute name="DefaultCacheTimeout">1800</attribute>
  |       <!-- DefaultCacheResolution: Specifies the default timed cache policy
  |       resolution in seconds. This controls the interval at which the cache
  |       current timestamp is updated and should be less than the DefaultCacheTimeout
  |       in order for the timeout to be meaningful. This has no affect if the
  |       AuthenticationCacheJndiName has been changed from the default value.
  |       -->
  |       <attribute name="DefaultCacheResolution">60</attribute>
  |    </mbean>
  | 

The caller of flushCache is a POJO but running from a Stateless Session Bean. Is there a classloader issue?

I am obviously doing something wrong, any pointer/solution/suggestion would be very welcomed!

Thanks!

Benoit

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4124095#4124095

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4124095



More information about the jboss-user mailing list