Weblogic:Java呼叫Weblogic API建立使用者和修改密碼
阿新 • • 發佈:2019-02-02
介紹
如果要使用Weblogic內嵌的LDAP來做驗證,普通使用者無法直接修改自己的密碼,需要管理員登入weblogic console才能進行修改。weblogic提供api使用java程式碼來修改。
程式碼
import java.io.IOException; import java.net.MalformedURLException; import java.util.Hashtable; import javax.management.InstanceNotFoundException; import javax.management.MBeanException; import javax.management.MBeanServerConnection; import javax.management.MalformedObjectNameException; import javax.management.ObjectName; import javax.management.ReflectionException; import javax.management.remote.JMXConnector; import javax.management.remote.JMXConnectorFactory; import javax.management.remote.JMXServiceURL; import javax.naming.Context; public class DefaultAuthenticatorAdapter { private static MBeanServerConnection connection; private static JMXConnector connector; private static ObjectName service; static { try { service = new ObjectName("Security:Name=myrealmDefaultAuthenticator"); } catch (MalformedObjectNameException e) { e.printStackTrace(); } } public void connection(String hostname, String portString, String username, String password) throws IOException, MalformedURLException { String protocol = "t3"; Integer portInteger = Integer.valueOf(portString); int port = portInteger.intValue(); String jndiroot = "/jndi/"; String mserver = "weblogic.management.mbeanservers.domainruntime"; JMXServiceURL serviceURL = new JMXServiceURL(protocol, hostname, port, jndiroot + mserver); Hashtable h = new Hashtable(); h.put(Context.SECURITY_PRINCIPAL, username); h.put(Context.SECURITY_CREDENTIALS, password); h.put(JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES, "weblogic.management.remote"); h.put("jmx.remote.x.request.waiting.timeout", new Long(10000)); connector = JMXConnectorFactory.connect(serviceURL, h); connection = connector.getMBeanServerConnection(); } public void createUser(String username, String password, String description) throws InstanceNotFoundException, MBeanException, ReflectionException, IOException { Object[] params = { username, password, description }; String[] signature = { "java.lang.String", "java.lang.String", "java.lang.String" }; connection.invoke(service, "createUser", params, signature); } public void changeUserPassword(String username, String oldPassword, String newPassword) { try { Object[] params = { username, oldPassword, newPassword }; String[] signature = { "java.lang.String", "java.lang.String", "java.lang.String" }; connection.invoke(service, "changeUserPassword", params, signature); } catch (InstanceNotFoundException e) { e.printStackTrace(); } catch (MBeanException e) { String message = e.getMessage(); System.out.println("message = " + message); } catch (ReflectionException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) throws Exception { String hostname = "10.1.36.47"; String portString = "7101"; String username = "weblogic"; String password = "welcome1"; DefaultAuthenticatorAdapter c = new DefaultAuthenticatorAdapter(); c.connection(hostname, portString, username, password); c.createUser("test1", "welcome1", "dddddddddddddddddd"); //c.changeUserPassword("test1", "welcome3", "welcome4"); connector.close(); } }