1. 程式人生 > >Weblogic:Java呼叫Weblogic API建立使用者和修改密碼

Weblogic:Java呼叫Weblogic API建立使用者和修改密碼

介紹

如果要使用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();
    }
}