package com.sortec.jmx;
import java.util.Properties;
import java.util.Set;
import javax.management.Attribute;
import javax.management.AttributeList;
import javax.management.ObjectName;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.ibm.websphere.management.AdminClient;
import com.ibm.websphere.management.AdminClientFactory;
import com.ibm.websphere.management.Session;
import com.ibm.websphere.management.configservice.ConfigServiceHelper;
import com.ibm.websphere.management.configservice.ConfigServiceProxy;
/**
* websphere 6.1 jndi 连接用的j2c认证数据
* @author wuxin
* @email wuxin@sortec.com.cn
* @date 2011-9-9
*/
public class WasJ2cAuthPwdHandler
{
private Log log = LogFactory.getLog(WasJ2cAuthPwdHandler.class);
private WasJ2cObject wasJ2cObject ;
public WasJ2cAuthPwdHandler(WasJ2cObject wasJ2cObject)
{
this.wasJ2cObject = wasJ2cObject ;
}
/**
* 修改密码
* @return
*/
public boolean createAuthData()
{
AdminClient adminClient = null;
boolean result = false;
try
{
log.info("ready update info: washost="+wasJ2cObject.getHostname()+" wasport="+wasJ2cObject.getSoap_port()+" wasusername="+wasJ2cObject.getUsername()+
" waspassword="+wasJ2cObject.getPassword()+" j2calias="+wasJ2cObject.getJ2c_alias()+" j2cuserid="+wasJ2cObject.getJ2c_userid()+" j2cpassword="+wasJ2cObject.getJ2c_password());
adminClient = this.getAdminClient();
if(adminClient == null) return result;
ConfigServiceProxy configService = new ConfigServiceProxy(adminClient);
Session session = new Session();
// Use this group to add to the node scoped security.xml.
ObjectName pattern = ConfigServiceHelper.createObjectName(null,"Security");
ObjectName[] securitys = configService.queryConfigObjects(session, null, pattern, null);
AttributeList attrList = new AttributeList();
attrList.clear();
attrList.add(new Attribute("alias", ""+System.currentTimeMillis()));
attrList.add(new Attribute("userId", "username"));
attrList.add(new Attribute("password", "password"));
ObjectName authDataObjectName = configService.createConfigData(session, securitys[0],"authDataEntries", "JAASAuthData", attrList);
System.out.println(authDataObjectName.toString());
configService.save(session,false);
}catch(Exception e)
{
e.printStackTrace();
}finally
{
if(adminClient != null) adminClient = null;
}
return result ;
}
/**
* 修改密码
* @return
*/
public boolean updateAuthData()
{
AdminClient adminClient = null;
boolean result = false;
try
{
log.info("ready update info: washost="+wasJ2cObject.getHostname()+" wasport="+wasJ2cObject.getSoap_port()+" wasusername="+wasJ2cObject.getUsername()+
" waspassword="+wasJ2cObject.getPassword()+" j2calias="+wasJ2cObject.getJ2c_alias()+" j2cuserid="+wasJ2cObject.getJ2c_userid()+" j2cpassword="+wasJ2cObject.getJ2c_password());
adminClient = this.getAdminClient();
if(adminClient == null) return result;
ConfigServiceProxy configService = new ConfigServiceProxy(adminClient);
Session session = new Session();
// Use this group to add to the node scoped security.xml.
ObjectName j2c = ConfigServiceHelper.createObjectName(null,"JAASAuthData",null);
ObjectName[] j2cs = configService.queryConfigObjects(session, null,j2c, null);
for(ObjectName on : j2cs)
{
Object alias = configService.getAttribute(session, on, "alias");
String aliasStr = alias.toString();
log.info("list j2calias from was :"+aliasStr);
if(aliasStr.equals(wasJ2cObject.getJ2c_alias()))
{
Object userId = configService.getAttribute(session, on, "userId");
Object password = configService.getAttribute(session, on, "password");
log.info("old j2c auth data : alias="+alias+",userid="+userId+",password="+password);
AttributeList provAttrs = new AttributeList();
provAttrs.add(new Attribute("userId", wasJ2cObject.getJ2c_userid()));
provAttrs.add(new Attribute("password",wasJ2cObject.getJ2c_password()));
//update the JAASAuthData
configService.setAttributes(session, on, provAttrs);
//save
configService.save(session, false);
//restart server
// this.restartServer(adminClient);
result = true;
break;
}
}
}catch(Exception e)
{
e.printStackTrace();
}finally
{
if(adminClient != null) adminClient = null;
}
return result ;
}
private AdminClient getAdminClient()
{
AdminClient adminClient = null;
try
{
String hostname = wasJ2cObject.getHostname();
int port = wasJ2cObject.getSoap_port();
String username = wasJ2cObject.getUsername();
String password = wasJ2cObject.getPassword();
String trustStore = wasJ2cObject.getTrustStore();
String keyStore = wasJ2cObject.getKeyStore();
String trustStorePassword = wasJ2cObject.getTrustStorePassword();
String keyStorePassword = wasJ2cObject.getKeyStorePassword();
log.info("\nWebsphere 开始连接");
// System.setProperty("javax.net.debug", "ssl");
Properties connectProps = new Properties();
connectProps.setProperty(AdminClient.CONNECTOR_TYPE, AdminClient.CONNECTOR_TYPE_SOAP);
connectProps.setProperty(AdminClient.CONNECTOR_HOST, hostname);
connectProps.setProperty(AdminClient.CONNECTOR_PORT, String.valueOf(port));
// connectProps.setProperty(AdminClient.CONNECTOR_SECURITY_ENABLED, "true");
// WebSphere服务器是否已启用管理安全性
if(trustStore!=null&&!trustStore.trim().equals(""))
connectProps.setProperty("javax.net.ssl.trustStore",trustStore);
if(keyStore!=null&&!keyStore.trim().equals(""))
connectProps.setProperty("javax.net.ssl.keyStore", keyStore);
if(trustStorePassword!=null&&!trustStorePassword.trim().equals(""))
connectProps.setProperty("javax.net.ssl.trustStorePassword",trustStorePassword);
if(keyStorePassword!=null&&!keyStorePassword.trim().equals(""))
connectProps.setProperty("javax.net.ssl.keyStorePassword", keyStorePassword);
if(username!=null&&!username.trim().equals(""))
connectProps.setProperty(AdminClient.USERNAME, username);
if(password!=null&&!password.trim().equals(""))
connectProps.setProperty(AdminClient.PASSWORD, password);
adminClient = AdminClientFactory.createAdminClient(connectProps);
}catch(Exception e)
{
e.printStackTrace();
log.error("异常:getConnectWebsphere(),可能服务未启,或jar包资源不全 ");
}
return adminClient ;
}
private void restartServer(AdminClient adminClient)
{
try
{
ObjectName name = new ObjectName("WebSphere:*,type=Server,j2eeType=J2EEServer");
Set queryResult = adminClient.queryNames(name, null);
ObjectName serverMBean =(ObjectName) queryResult.iterator().next();
log.info("***** restart server:"+serverMBean.toString());
adminClient.invoke(serverMBean,"restart",null,null);
}catch(Exception e)
{
e.printStackTrace();
}
}
}
import java.util.Properties;
import java.util.Set;
import javax.management.Attribute;
import javax.management.AttributeList;
import javax.management.ObjectName;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.ibm.websphere.management.AdminClient;
import com.ibm.websphere.management.AdminClientFactory;
import com.ibm.websphere.management.Session;
import com.ibm.websphere.management.configservice.ConfigServiceHelper;
import com.ibm.websphere.management.configservice.ConfigServiceProxy;
/**
* websphere 6.1 jndi 连接用的j2c认证数据
* @author wuxin
* @email wuxin@sortec.com.cn
* @date 2011-9-9
*/
public class WasJ2cAuthPwdHandler
{
private Log log = LogFactory.getLog(WasJ2cAuthPwdHandler.class);
private WasJ2cObject wasJ2cObject ;
public WasJ2cAuthPwdHandler(WasJ2cObject wasJ2cObject)
{
this.wasJ2cObject = wasJ2cObject ;
}
/**
* 修改密码
* @return
*/
public boolean createAuthData()
{
AdminClient adminClient = null;
boolean result = false;
try
{
log.info("ready update info: washost="+wasJ2cObject.getHostname()+" wasport="+wasJ2cObject.getSoap_port()+" wasusername="+wasJ2cObject.getUsername()+
" waspassword="+wasJ2cObject.getPassword()+" j2calias="+wasJ2cObject.getJ2c_alias()+" j2cuserid="+wasJ2cObject.getJ2c_userid()+" j2cpassword="+wasJ2cObject.getJ2c_password());
adminClient = this.getAdminClient();
if(adminClient == null) return result;
ConfigServiceProxy configService = new ConfigServiceProxy(adminClient);
Session session = new Session();
// Use this group to add to the node scoped security.xml.
ObjectName pattern = ConfigServiceHelper.createObjectName(null,"Security");
ObjectName[] securitys = configService.queryConfigObjects(session, null, pattern, null);
AttributeList attrList = new AttributeList();
attrList.clear();
attrList.add(new Attribute("alias", ""+System.currentTimeMillis()));
attrList.add(new Attribute("userId", "username"));
attrList.add(new Attribute("password", "password"));
ObjectName authDataObjectName = configService.createConfigData(session, securitys[0],"authDataEntries", "JAASAuthData", attrList);
System.out.println(authDataObjectName.toString());
configService.save(session,false);
}catch(Exception e)
{
e.printStackTrace();
}finally
{
if(adminClient != null) adminClient = null;
}
return result ;
}
/**
* 修改密码
* @return
*/
public boolean updateAuthData()
{
AdminClient adminClient = null;
boolean result = false;
try
{
log.info("ready update info: washost="+wasJ2cObject.getHostname()+" wasport="+wasJ2cObject.getSoap_port()+" wasusername="+wasJ2cObject.getUsername()+
" waspassword="+wasJ2cObject.getPassword()+" j2calias="+wasJ2cObject.getJ2c_alias()+" j2cuserid="+wasJ2cObject.getJ2c_userid()+" j2cpassword="+wasJ2cObject.getJ2c_password());
adminClient = this.getAdminClient();
if(adminClient == null) return result;
ConfigServiceProxy configService = new ConfigServiceProxy(adminClient);
Session session = new Session();
// Use this group to add to the node scoped security.xml.
ObjectName j2c = ConfigServiceHelper.createObjectName(null,"JAASAuthData",null);
ObjectName[] j2cs = configService.queryConfigObjects(session, null,j2c, null);
for(ObjectName on : j2cs)
{
Object alias = configService.getAttribute(session, on, "alias");
String aliasStr = alias.toString();
log.info("list j2calias from was :"+aliasStr);
if(aliasStr.equals(wasJ2cObject.getJ2c_alias()))
{
Object userId = configService.getAttribute(session, on, "userId");
Object password = configService.getAttribute(session, on, "password");
log.info("old j2c auth data : alias="+alias+",userid="+userId+",password="+password);
AttributeList provAttrs = new AttributeList();
provAttrs.add(new Attribute("userId", wasJ2cObject.getJ2c_userid()));
provAttrs.add(new Attribute("password",wasJ2cObject.getJ2c_password()));
//update the JAASAuthData
configService.setAttributes(session, on, provAttrs);
//save
configService.save(session, false);
//restart server
// this.restartServer(adminClient);
result = true;
break;
}
}
}catch(Exception e)
{
e.printStackTrace();
}finally
{
if(adminClient != null) adminClient = null;
}
return result ;
}
private AdminClient getAdminClient()
{
AdminClient adminClient = null;
try
{
String hostname = wasJ2cObject.getHostname();
int port = wasJ2cObject.getSoap_port();
String username = wasJ2cObject.getUsername();
String password = wasJ2cObject.getPassword();
String trustStore = wasJ2cObject.getTrustStore();
String keyStore = wasJ2cObject.getKeyStore();
String trustStorePassword = wasJ2cObject.getTrustStorePassword();
String keyStorePassword = wasJ2cObject.getKeyStorePassword();
log.info("\nWebsphere 开始连接");
// System.setProperty("javax.net.debug", "ssl");
Properties connectProps = new Properties();
connectProps.setProperty(AdminClient.CONNECTOR_TYPE, AdminClient.CONNECTOR_TYPE_SOAP);
connectProps.setProperty(AdminClient.CONNECTOR_HOST, hostname);
connectProps.setProperty(AdminClient.CONNECTOR_PORT, String.valueOf(port));
// connectProps.setProperty(AdminClient.CONNECTOR_SECURITY_ENABLED, "true");
// WebSphere服务器是否已启用管理安全性
if(trustStore!=null&&!trustStore.trim().equals(""))
connectProps.setProperty("javax.net.ssl.trustStore",trustStore);
if(keyStore!=null&&!keyStore.trim().equals(""))
connectProps.setProperty("javax.net.ssl.keyStore", keyStore);
if(trustStorePassword!=null&&!trustStorePassword.trim().equals(""))
connectProps.setProperty("javax.net.ssl.trustStorePassword",trustStorePassword);
if(keyStorePassword!=null&&!keyStorePassword.trim().equals(""))
connectProps.setProperty("javax.net.ssl.keyStorePassword", keyStorePassword);
if(username!=null&&!username.trim().equals(""))
connectProps.setProperty(AdminClient.USERNAME, username);
if(password!=null&&!password.trim().equals(""))
connectProps.setProperty(AdminClient.PASSWORD, password);
adminClient = AdminClientFactory.createAdminClient(connectProps);
}catch(Exception e)
{
e.printStackTrace();
log.error("异常:getConnectWebsphere(),可能服务未启,或jar包资源不全 ");
}
return adminClient ;
}
private void restartServer(AdminClient adminClient)
{
try
{
ObjectName name = new ObjectName("WebSphere:*,type=Server,j2eeType=J2EEServer");
Set queryResult = adminClient.queryNames(name, null);
ObjectName serverMBean =(ObjectName) queryResult.iterator().next();
log.info("***** restart server:"+serverMBean.toString());
adminClient.invoke(serverMBean,"restart",null,null);
}catch(Exception e)
{
e.printStackTrace();
}
}
}