Class JDBCUserPropertyProvider

java.lang.Object
org.jivesoftware.openfire.user.property.JDBCUserPropertyProvider
All Implemented Interfaces:
UserPropertyProvider

public class JDBCUserPropertyProvider extends Object implements UserPropertyProvider
The JDBC user property provider allows you to use an external database to define the user properties. It is best used with the JDBCUserProvider, JDBCAuthProvider & JDBCGroupProvider to provide integration between your external system and Openfire. All data is treated as read-only so any set operations will result in an exception. This implementation will not explicitly verify if a user exists, when operating on its properties. The methods of this implementation will not throw UserNotFoundException. To enable this provider, set the following in the system properties:
  • provider.userproperty.className = org.jivesoftware.openfire.user.property.JDBCUserPropertyProvider
Then you need to set your driver, connection string and SQL statements:
  • jdbcUserPropertyProvider.driver = com.mysql.jdbc.Driver
  • jdbcUserPropertyProvider.connectionString = jdbc:mysql://localhost/dbname?user=username&password=secret
  • jdbcUserPropertyProvider.loadPropertySQL = SELECT propName, propValue FROM myUser WHERE user = ? AND propName = ?
  • jdbcUserPropertyProvider.loadPropertiesSQL = SELECT propValue FROM myUser WHERE user = ?
In order to use the configured JDBC connection provider do not use a JDBCconnection string, set the following property: jdbcUserPropertyProvider.useConnectionProvider = true
Author:
Guus der Kinderen, guus.der.kinderen@gmail.com
  • Constructor Details

    • JDBCUserPropertyProvider

      public JDBCUserPropertyProvider()
      Constructs a new JDBC user property provider.
  • Method Details

    • assumePersistedDataIsEscaped

      protected boolean assumePersistedDataIsEscaped()
      XMPP disallows some characters in identifiers, requiring them to be escaped. This implementation assumes that the database returns properly escaped identifiers, but can apply escaping by setting the value of the 'jdbcUserPropertyProvider.isEscaped' property to 'false'.
      Returns:
      'false' if this implementation needs to escape database content before processing.
    • loadProperties

      public Map<String,String> loadProperties(String username) throws UnsupportedOperationException
      Description copied from interface: UserPropertyProvider
      Retrieves all properties for a particular user.
      Specified by:
      loadProperties in interface UserPropertyProvider
      Parameters:
      username - The identifier of the user (cannot be null or empty).
      Returns:
      A collection, possibly empty, but never null.
      Throws:
      UnsupportedOperationException
    • loadProperty

      public String loadProperty(String username, String propName)
      Description copied from interface: UserPropertyProvider
      Retrieves a property value for a user. This method will return null when the desired property was not defined for the user (null values are not supported).
      Specified by:
      loadProperty in interface UserPropertyProvider
      Parameters:
      username - The identifier of the user (cannot be null or empty).
      propName - The property name (cannot be null or empty).
      Returns:
      The property value (possibly null).
    • insertProperty

      public void insertProperty(String username, String propName, String propValue) throws UnsupportedOperationException
      Description copied from interface: UserPropertyProvider
      Adds a property for an user. The behavior of inserting a duplicate property name is not defined by this interface.
      Specified by:
      insertProperty in interface UserPropertyProvider
      Parameters:
      username - The identifier of the user (cannot be null or empty).
      propName - The property name (cannot be null or empty).
      propValue - The property value (cannot be null).
      Throws:
      UnsupportedOperationException - if the property cannot be added
    • updateProperty

      public void updateProperty(String username, String propName, String propValue) throws UnsupportedOperationException
      Description copied from interface: UserPropertyProvider
      Changes a property value for an user. The behavior of updating a non-existing property is not defined by this interface.
      Specified by:
      updateProperty in interface UserPropertyProvider
      Parameters:
      username - The identifier of the user (cannot be null or empty).
      propName - The property name (cannot be null or empty).
      propValue - The property value (cannot be null).
      Throws:
      UnsupportedOperationException - if the property cannot be updated
    • deleteProperty

      public void deleteProperty(String username, String propName) throws UnsupportedOperationException
      Description copied from interface: UserPropertyProvider
      Removes one particular property for a particular user. The behavior of deleting a non-existing property is not defined by this interface.
      Specified by:
      deleteProperty in interface UserPropertyProvider
      Parameters:
      username - The identifier of the user (cannot be null or empty).
      propName - The property name (cannot be null or empty).
      Throws:
      UnsupportedOperationException - if the property cannot be deleted
    • isReadOnly

      public boolean isReadOnly()
      Description copied from interface: UserPropertyProvider
      Returns true if this UserPropertyProvider is read-only. When read-only, properties can not be created, deleted or modified. Invocation of the corresponding methods should result in an UnsupportedOperationException.
      Specified by:
      isReadOnly in interface UserPropertyProvider
      Returns:
      true if the user provider is read-only.