Code:
- * Created on May 4, 2009
- */
- package ic.util.sso;
-
- import java.beans.PropertyVetoException;
- import java.security.PrivilegedAction;
- import java.sql.Connection;
- import java.sql.SQLException;
-
- import javax.security.auth.Subject;
- import javax.security.auth.login.LoginContext;
-
- import org.ietf.jgss.GSSCredential;
- import org.ietf.jgss.GSSException;
- import org.ietf.jgss.GSSManager;
- import org.ietf.jgss.GSSName;
- import org.ietf.jgss.Oid;
-
- import com.ibm.as400.access.AS400;
- import com.ibm.as400.access.AS400JDBCDriver;
-
- * Use Kerberos to log in to the AS/400
- *
- * @author mrusso
- */
- public class SsoLogin implements PrivilegedAction {
-
- private String as400Name;
- private String user;
- private String password;
-
- public SsoLogin(String user, String password, String as400Name) {
- this.user = user;
- this.password = password;
- this.as400Name = as400Name;
- }
-
-
- * Get an AS/400 connection from the user's AD credentials
- *
- * @param user
- * @param password
- * @return
- * @throws Exception
- */
- public Connection getConnection() throws Exception {
- SsoCallbackHandler callbackHandler = new SsoCallbackHandler(user,
- password);
- LoginContext lc = new LoginContext("SsoLogin", callbackHandler);
- lc.login();
- Subject s = lc.getSubject();
- Object obj = Subject.doAs(s, this);
- if (obj instanceof Exception) {
- throw (Exception) obj;
- }
- return (Connection) obj;
- }
-
-
- * (non-Javadoc)
- *
- * @see java.security.PrivilegedAction#run()
- */
- public Object run() {
- GSSManager manager = GSSManager.getInstance();
- GSSCredential userCreds;
- try {
- Oid krb5Mechanism = new Oid("1.2.840.113554.1.2.2");
- GSSName userName = manager.createName(
- user + "@xxx.xxx.xxx", GSSName.NT_USER_NAME);
- userCreds = manager.createCredential(userName,
- GSSCredential.DEFAULT_LIFETIME, krb5Mechanism,
- GSSCredential.INITIATE_ONLY);
- } catch (GSSException e1) {
- return e1;
- }
- AS400 as400 = new AS400(as400Name);
- as400.setGSSCredential(userCreds);
- try {
- as400.setGuiAvailable(false);
- } catch (PropertyVetoException e) {
- return e;
- }
- AS400JDBCDriver driver = new AS400JDBCDriver();
- Connection conn;
- try {
- conn = driver.connect(as400);
- } catch (SQLException e2) {
- return e2;
- }
- return conn;
- }
-
- }
-
|
|