那個,相信在測試的時後,一直看到 console 叫你改 admin 的密碼~
一定會覺得很煩XD...
如果是透過 studio 的話,就是在這邊,自己來改一改...
不過是說...這個server沒動設定的話,是可以匿名(就是不打user)就連上來~
一樣是感覺非常不安全....
只是,它本身就已經是整個包好的一個 jar 檔,所以只好用 java 直接改寫了~
事先要有 那包完整的 source code(嗯,就是幾十個project 的那個)
不過我也不想改他的 source,因為改了要重包,想到maven 在那邊拼命下載 update 就 覺得人生火花(台語)..好啦,其實我也不會包=.=...也不想包,包壞了debug就累死...
所以我採用外掛取代的方式。source code 是拿來抄跟比對用的(因為文件不可靠阿Q_Q)
這方法,也是 google 到的,不知道算不算爛解(那篇是寫1.5版,method 不同,但作法方向是一樣的,就不po了~),不過我覺得那方向是一個不破壞原本的內容不錯的作法。
1. 改寫 起動 bat (還沒測好前,可以先copy來用就好了,linex 就是改.sh)
apacheds-2.0.0-M23\bin\apacheds.bat
最底下一行
java %ADS_CONTROLS% %ADS_EXTENDED_OPERATIONS% -Dlog4j.configuration="file:../instances/%INSTANCE_NAME%/conf/log4j.properties" -Dapacheds.log.dir=../instances/%INSTANCE_NAME%/log -cp %ADS_CLASSPATH% org.apache.directory.server.UberjarMain ../instances/%INSTANCE_NAME% %ACTION%
把啟動的 main method 改成自訂的 ex:
java %ADS_CONTROLS% %ADS_EXTENDED_OPERATIONS%
-Dlog4j.configuration="file:../instances/%INSTANCE_NAME%/conf/log4j.properties"
-Dapacheds.log.dir=../instances/%INSTANCE_NAME%/log -cp %ADS_CLASSPATH% xxx.yyy.zzz.MyStart ../instances/%INSTANCE_NAME% %ACTION%
2. copy 一隻自訂的啟動 Java... MyStart
那個 Start Server 很難寫,說真的我也不會啦,但是,有提示跟有 source code...
就是copy org.apache.directory.server.UberjarMain 一模一樣內容的就對了~
只是改 package 跟 class name ,讓 bat 是用自訂來啟動就是了...
然後找到可以插入設定的程式碼區段,我是把他加在 start 起來後~
public void start( String instanceDirectory ) {
InstanceLayout layout = new InstanceLayout( instanceDirectory );
// Creating ApacheDS service
service = new ApacheDsService();
// Initializing the service
try {
LOG.info( "Starting the service." );
service.start( layout );
startShutdownListener( layout );
//add my custom
custom();
} catch ( Exception e ) {
LOG.error( "Failed to start the service.", e );
stop();
System.exit( 1 );
}
}
在 complire 的時後,我是直接掛 ext lib apacheds-service-2.0.0-M23.jar 上來用,萬一有些還是會對不到的,就是用 eclipse include project 進來處理。
(用 maven 去 下相依的 apachds-all 檔並沒有比較好,抓不到的 class 更多)
3. 寫 自訂的部份~
我有印一些數值,和修改一些安全性設定的部份~
取消匿名訪問,和若是admin 密碼跟預設的一樣,就自己隨便改一下~
(改密碼那段,理論上是應該用 ModificationOperation.REPLACE,不過=.=因為之前測試寫錯了,生了好幾個password 的 attr...就先殺了再建,一次解決)
DirectoryService ds = this.service.getDirectoryService();
ds.setAllowAnonymousAccess(false);
//change admin pwd to avoid some issue
Dn adminDn = ds.getDnFactory().create( ServerDNConstants.ADMIN_SYSTEM_DN );
Entry adminEntry = ds.getAdminSession().lookup(adminDn);
Value<?> userPassword = adminEntry.get( SchemaConstants.USER_PASSWORD_AT ).get();
boolean needToChangeAdminPassword = Arrays.equals( PartitionNexus.ADMIN_PASSWORD_BYTES, userPassword.getBytes() );
System.out.println("needToChangeAdminPassword="+needToChangeAdminPassword);
if(needToChangeAdminPassword) {
Modification modify2 = new DefaultModification( ModificationOperation.REMOVE_ATTRIBUTE, "userPassword");
Modification modify3 = new DefaultModification( ModificationOperation.ADD_ATTRIBUTE, "userPassword", "123456" );
ds.getAdminSession().modify(adminDn, modify2, modify3);
System.out.println("change the password ok.");
}
4. 寫好的Java 內容包成 jar 檔,放到 apacheds-2.0.0-M23\lib 裡
基本上就是那個 lib 會有兩,原本的 apacheds-service-2.0.0-M23.jar 和 自己包的 xxxx.jar
5. 啟動測試~
連線上就改一下
測試時,可以用 studio 建 connection 來試,理論上這樣一改,原本不打user/pwd 的就不行了~只是,還沒key密碼前,server 上的 log 會長很醜就是了...
沒有留言:
張貼留言