zoukankan      html  css  js  c++  java
  • 自定义JndiObjectFactoryBean密码

    package com.svcm.util;
    
    import java.lang.reflect.Field;
    
    import javax.naming.NamingException;
    
    import org.springframework.aop.framework.ProxyFactory;
    import org.springframework.beans.factory.FactoryBean;
    import org.springframework.jndi.JndiObjectLocator;
    import org.springframework.jndi.JndiObjectTargetSource;
    
    import com.svcm.cyber.pidmsDemo.PasswordFactory;
    
    
    public class MyJndiObjectFactoryBean extends JndiObjectLocator implements FactoryBean {
    
        private Class proxyInterface;
    
        private boolean lookupOnStartup = true;
    
        private boolean cache = true;
    
        private Object jndiObject;
    
    
        
        public void setProxyInterface(Class proxyInterface) {
            if (!proxyInterface.isInterface()) {
                throw new IllegalArgumentException("[" + proxyInterface.getName() + "] is not an interface");
            }
            this.proxyInterface = proxyInterface;
        }
    
        
        public void setLookupOnStartup(boolean lookupOnStartup) {
            this.lookupOnStartup = lookupOnStartup;
        }
    
        
        public void setCache(boolean cache) {
            this.cache = cache;
        }
    
        
        public void afterPropertiesSet() throws NamingException {
            super.afterPropertiesSet();
    
            if (this.proxyInterface != null) {
                // We need a proxy and a JndiObjectTargetSource.
                this.jndiObject = JndiObjectProxyFactory.createJndiObjectProxy(this);
            }
            else {
                if (!this.lookupOnStartup || !this.cache) {
                    throw new IllegalArgumentException(
                        "Cannot deactivate 'lookupOnStartup' or 'cache' without specifying a 'proxyInterface'");
                }
                // Locate specified JNDI object.
                this.jndiObject = lookup();
                Object mcf = null;
                try {
                    mcf = getPropertyValue(this.jndiObject,"mcf");
                    System.out.println("password1:"+ getPropertyValue(mcf,"password"));
                    Field f;
                    try {
                        PasswordFactory passwordFactory = new PasswordFactory();
                        setPropertyValue(mcf,"password",passwordFactory.getObject());
                        System.out.println("password2:"+ getPropertyValue(mcf,"password"));
                    } catch (SecurityException e) {
                        e.printStackTrace();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
            }
        }
    
    
        
        public Object getObject() {
            return this.jndiObject;
        }
    
        public Class getObjectType() {
            if (this.jndiObject != null) {
                return this.jndiObject.getClass();
            }
            else if (this.proxyInterface != null) {
                return this.proxyInterface;
            }
            else {
                return null;
            }
        }
    
        public boolean isSingleton() {
            return true;
        }
    
    
    
        private static class JndiObjectProxyFactory {
    
            private static Object createJndiObjectProxy(MyJndiObjectFactoryBean jof) throws NamingException {
                // Create a JndiObjectTargetSource that mirrors the JndiObjectFactoryBean's configuration.
                JndiObjectTargetSource targetSource = new JndiObjectTargetSource();
                targetSource.setJndiTemplate(jof.getJndiTemplate());
                targetSource.setJndiName(jof.getJndiName());
                targetSource.setExpectedType(jof.getExpectedType());
                targetSource.setResourceRef(jof.isResourceRef());
                targetSource.setLookupOnStartup(jof.lookupOnStartup);
                targetSource.setCache(jof.cache);
                targetSource.afterPropertiesSet();
    
                // Create a proxy with JndiObjectFactoryBean's proxy interface and the JndiObjectTargetSource.
                ProxyFactory proxyFactory = new ProxyFactory();
                proxyFactory.addInterface(jof.proxyInterface);
                proxyFactory.setTargetSource(targetSource);
                return proxyFactory.getProxy();
            }
        }
        public static Object getPropertyValue(Object obj, String propertyName) throws IllegalAccessException {
            Class<?> Clazz = obj.getClass();
            Field field;
            if ((field = getField(Clazz, propertyName)) == null)
                return null;
            field.setAccessible(true);
            return field.get(obj);
        }
    
        public static Field getField(Class<?> clazz, String propertyName) {
            if (clazz == null)
                return null;
            try {
                return clazz.getDeclaredField(propertyName);
            } catch (NoSuchFieldException e) {
                return getField(clazz.getSuperclass(), propertyName);
            }
        }
        public static void setPropertyValue(Object obj, String propertyName,String value) throws IllegalAccessException {
            Class<?> Clazz = obj.getClass();
            Field field;
            if ((field = getField(Clazz, propertyName)) == null){
                System.out.println(propertyName+"不存在!!!");
            }
            field.setAccessible(true);
            field.set(obj,value);
        }
    
    }
  • 相关阅读:
    azkaben任务调度器
    HQL练习
    Hive基本操作
    Spark cache、checkpoint机制笔记
    2021年元旦云南之旅
    2020年总
    Windows Server 2016 如何恢复.NET Framework 4.6
    numpy和tensorflow中的广播机制
    查看spark RDD 各分区内容
    Spark RDD的默认分区数:(spark 2.1.0)
  • 原文地址:https://www.cnblogs.com/penghq/p/14172650.html
Copyright © 2011-2022 走看看