Class SSPIClient

  • All Implemented Interfaces:
    ISSPIClient

    public class SSPIClient
    extends java.lang.Object
    implements ISSPIClient

    Use Waffle-JNI to support SSPI authentication when PgJDBC is running on a Windows client and talking to a Windows server.

    SSPI is not supported on a non-Windows client.

    Author:
    craig
    • Constructor Summary

      Constructors 
      Constructor Description
      SSPIClient​(PGStream pgStream, java.lang.String spnServiceClass, boolean enableNegotiate)
      Instantiate an SSPIClient for authentication of a connection.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void continueSSPI​(int msgLength)
      Continue an existing authentication conversation with the back-end in resonse to an authentication request of type AUTH_REQ_GSS_CONT.
      void dispose()
      Clean up native win32 resources after completion or failure of SSPI authentication.
      boolean isSSPISupported()
      Test whether we can attempt SSPI authentication.
      void startSSPI()
      Respond to an authentication request from the back-end for SSPI authentication (AUTH_REQ_SSPI).
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • SSPI_DEFAULT_SPN_SERVICE_CLASS

        public static final java.lang.String SSPI_DEFAULT_SPN_SERVICE_CLASS
        See Also:
        Constant Field Values
    • Constructor Detail

      • SSPIClient

        public SSPIClient​(PGStream pgStream,
                          java.lang.String spnServiceClass,
                          boolean enableNegotiate)

        Instantiate an SSPIClient for authentication of a connection.

        SSPIClient is not re-usable across connections.

        It is safe to instantiate SSPIClient even if Waffle and JNA are missing or on non-Windows platforms, however you may not call any methods other than isSSPISupported().

        Parameters:
        pgStream - PostgreSQL connection stream
        spnServiceClass - SSPI SPN service class, defaults to POSTGRES if null
        enableNegotiate - enable negotiate
    • Method Detail

      • isSSPISupported

        public boolean isSSPISupported()
        Test whether we can attempt SSPI authentication. If false, do not attempt to call any other SSPIClient methods.
        Specified by:
        isSSPISupported in interface ISSPIClient
        Returns:
        true if it's safe to attempt SSPI authentication
      • startSSPI

        public void startSSPI()
                       throws java.sql.SQLException,
                              java.io.IOException
        Respond to an authentication request from the back-end for SSPI authentication (AUTH_REQ_SSPI).
        Specified by:
        startSSPI in interface ISSPIClient
        Throws:
        java.sql.SQLException - on SSPI authentication handshake failure
        java.io.IOException - on network I/O issues
      • continueSSPI

        public void continueSSPI​(int msgLength)
                          throws java.sql.SQLException,
                                 java.io.IOException
        Continue an existing authentication conversation with the back-end in resonse to an authentication request of type AUTH_REQ_GSS_CONT.
        Specified by:
        continueSSPI in interface ISSPIClient
        Parameters:
        msgLength - Length of message to read, excluding length word and message type word
        Throws:
        java.sql.SQLException - if something wrong happens
        java.io.IOException - if something wrong happens
      • dispose

        public void dispose()
        Clean up native win32 resources after completion or failure of SSPI authentication. This SSPIClient instance becomes unusable after disposal.
        Specified by:
        dispose in interface ISSPIClient