midrange.com code scratchpad
Name:
SsoLogin.java
Scriptlanguage:
Java
Tabwidth:
4
Date:
10/07/2009 02:04:46 pm
IP:
Logged
Description:
Get an AS/400 Connection using Kerberos authentication
Code:
  1. /*
  2.  * Created on May 4, 2009
  3.  */
  4. package ic.util.sso;
  5.  
  6. import java.beans.PropertyVetoException;
  7. import java.security.PrivilegedAction;
  8. import java.sql.Connection;
  9. import java.sql.SQLException;
  10.  
  11. import javax.security.auth.Subject;
  12. import javax.security.auth.login.LoginContext;
  13.  
  14. import org.ietf.jgss.GSSCredential;
  15. import org.ietf.jgss.GSSException;
  16. import org.ietf.jgss.GSSManager;
  17. import org.ietf.jgss.GSSName;
  18. import org.ietf.jgss.Oid;
  19.  
  20. import com.ibm.as400.access.AS400;
  21. import com.ibm.as400.access.AS400JDBCDriver;
  22.  
  23. /**
  24.  * Use Kerberos to log in to the AS/400
  25.  * 
  26.  * @author mrusso
  27.  */
  28. public class SsoLogin implements PrivilegedAction {
  29.  
  30.     private String as400Name;
  31.     private String user;
  32.     private String password;
  33.     
  34.     public SsoLogin(String user, String password, String as400Name) {
  35.         this.user = user;
  36.         this.password = password;
  37.         this.as400Name = as400Name;
  38.     }
  39.     
  40.     /**
  41.      * Get an AS/400 connection from the user's AD credentials
  42.      * 
  43.      * @param user
  44.      * @param password
  45.      * @return
  46.      * @throws Exception
  47.      */
  48.     public Connection getConnection() throws Exception {
  49.         SsoCallbackHandler callbackHandler = new SsoCallbackHandler(user,
  50.                 password);
  51.         LoginContext lc = new LoginContext("SsoLogin", callbackHandler);
  52.         lc.login();
  53.         Subject s = lc.getSubject();
  54.         Object obj = Subject.doAs(s, this);
  55.         if (obj instanceof Exception) {
  56.             throw (Exception) obj;
  57.         }
  58.         return (Connection) obj;
  59.     }
  60.  
  61.     /*
  62.      * (non-Javadoc)
  63.      * 
  64.      * @see java.security.PrivilegedAction#run()
  65.      */
  66.     public Object run() {
  67.         GSSManager manager = GSSManager.getInstance();
  68.         GSSCredential userCreds;
  69.         try {
  70.             Oid krb5Mechanism = new Oid("1.2.840.113554.1.2.2");
  71.             GSSName userName = manager.createName(
  72.                     user + "@xxx.xxx.xxx", GSSName.NT_USER_NAME); // fill in xxx.xxx.xxx with your domain
  73.             userCreds = manager.createCredential(userName,
  74.                     GSSCredential.DEFAULT_LIFETIME, krb5Mechanism,
  75.                     GSSCredential.INITIATE_ONLY);
  76.         } catch (GSSException e1) {
  77.             return e1;
  78.         }
  79.         AS400 as400 = new AS400(as400Name);
  80.         as400.setGSSCredential(userCreds);
  81.         try {
  82.             as400.setGuiAvailable(false);
  83.         } catch (PropertyVetoException e) {
  84.             return e;
  85.         }
  86.         AS400JDBCDriver driver = new AS400JDBCDriver();
  87.         Connection conn;
  88.         try {
  89.             conn = driver.connect(as400);
  90.         } catch (SQLException e2) {
  91.             return e2;
  92.         }
  93.         return conn;
  94.     }
  95.  
  96. }
  97.  
© 2004-2019 by midrange.com generated in 0.014s valid xhtml & css