子在川上曰

            逝者如斯夫不舍晝夜
          隨筆 - 71, 文章 - 0, 評論 - 915, 引用 - 0
          數(shù)據(jù)加載中……

          JAAS在Java Web Start中的設(shè)置

          文/陳剛 from www.chengang.com.cn

          一、前言

            我這個(gè)AdminConsole項(xiàng)目是用Java Web Start(簡稱JWS)來讓用戶訪問的,后來在用戶登錄部份用到了JAAS,而JAAS有一個(gè)登錄配置文件的設(shè)定。過去,我一直是在Eclipse的Run里做設(shè)置“-Djava.security.auth.login.config=D:\wxxr\login.config”,如下圖:

            但這只是權(quán)宜之計(jì),在將項(xiàng)目從本地以JWS發(fā)布到服務(wù)器就會(huì)碰到兩個(gè)問題:(1)為了靈活,不能引用絕對地址的(2)在JWS中怎么設(shè)定對login.config的引用。

            JAAS中對配置文件login.config的引用,主要有兩種方法:
          (1)動(dòng)態(tài)配置:“-Djava.security.auth.login.config=D:\wxxr\login.config”。它其實(shí)是java.exe的一個(gè)參數(shù),你可以像我一樣在Eclipse的run里設(shè)置,也可以在命令行運(yùn)行程序的方式中指定:c:\jdk\bin\java -Djava.security.auth.login.config=D:\wxxr\login.config -jar.......。
          (2)在程序里靜態(tài)配置:System.setProperty("java.security.auth.login.config", "D:\wxxr\login.config");

          二、JWS中對JAAS動(dòng)態(tài)配置的方法

            在JWS中,如果你想動(dòng)態(tài)配置的,則在JWS的jnlp文件里設(shè)置如下:
           <resources>
            <j2se version="1.4+" href=" ........  
           </resources>

          或者

           <resources>
            <j2se version="1.4+" href="
            <property name="java.security.auth.login.config" value="D:\wxxr\login.config"/>
           ........  
           </resources>

            上面的設(shè)置有一個(gè)關(guān)鍵問題:對login.config引用的是絕對地址,這個(gè)地址不是指向服務(wù)器端的地址,而是客戶端的地址。這也就要求客戶在D:\wxxr\目錄含有l(wèi)ogin.config文件,顯然我們不能對客戶有這種麻煩要求(最好就是客戶什么都不用做,這也是JWS的存在的價(jià)值和目的)。
            因此這里還有一個(gè)變通的方法:把“D:\wxxr\login.config”改成“http://your_website:8080/adminconsole/login.config”,這樣就會(huì)去網(wǎng)上定位login.config,而不必再把login.config安裝在客戶端里了。


          三、JWS中對JAAS靜態(tài)配置的方法

            在上面的用web url的方法中還是有一點(diǎn)缺陷,login.config將是可以被其他客戶輕易看到的,安全性不高。而且服務(wù)器的網(wǎng)站名變了以后,還得相應(yīng)修改jnlp文件。所以我們不妨考慮一下靜態(tài)配置的方法,用靜態(tài)配置方法之后,就不用在jnlp文件里配置了,少了不了麻煩。

          第一種:

          System.setProperty("java.security.auth.login.config"new URL(BasicServiceImpl.getInstance().getCodeBase(),"login.config").toString());

          說明:
          (1)BasicServiceImpl是JDK's javaws.jar包中的類(jdk\jre\javaws\javaws.jar)。
          (2)BasicServiceImpl.getInstance().getCodeBase()得到的值是“http://your_website:8080/adminconsole/”,這個(gè)還是和前面web url其實(shí)一樣,只不過它是動(dòng)態(tài)獲得web url。至于如何獲得服務(wù)器的路徑的那種,對于普通的java application我沒研究過,我只試過下面eclipse RCP的。
          (3)你只需要保證
          http://your_website:8080/adminconsole/login.config 能訪問到login.config文件即可。

          第二種:在Eclipse RCP程序中設(shè)置的方法

          String path = AdminConsolePlugin.getDefault().find(new Path("properties/login.config")).toString(); //AdminConsolePlugin就是項(xiàng)目的那***Plugin.java文件,不同的項(xiàng)目會(huì)不同。
          logger.info("login.config path=" + path); //logger是log4j的一個(gè)對象,你可以把這一行刪除
          System.setProperty("java.security.auth.login.config", path);

            path的值有點(diǎn)怪,是“bundleentry://3/properties/login.config”。properties/login.config在服務(wù)器上的位置如下圖:


            注:Eclipse RCP要裝在JWS上,還得用一個(gè)開源軟件WebRCP:http://sourceforge.net/projects/webrcp。此開源軟件簡單易用,連文檔都不用看。它提供的webrcp-tutorial,本身就是一個(gè)RCP使用webrcp的例子,你只需要參照archives\tutorial.zip的目錄結(jié)構(gòu)將自己的RCP項(xiàng)目打包,然后用自己項(xiàng)目的zip替換掉archives\tutorial.zip即可。如果你想換一個(gè)zip名字,則需要修改tutorial.jsp文件(其實(shí)也是一個(gè)jnlp)中的“<property name=....>”相應(yīng)的幾項(xiàng)。


          參考資料:
          http://forum.java.sun.com/thread.jspa?threadID=612861&tstart=300
          http://forum.java.sun.com/thread.jspa?threadID=621588&messageID=3523625

          posted on 2006-03-07 14:53 陳剛 閱讀(1371) 評論(0)  編輯  收藏 所屬分類: Java

          主站蜘蛛池模板: 北川| 和田县| 渭源县| 志丹县| 金平| 琼中| 衡阳县| 镇雄县| 青岛市| 临安市| 聂荣县| 南涧| 乌鲁木齐市| 仁怀市| 法库县| 大厂| 翁牛特旗| 上虞市| 德兴市| 桐城市| 广昌县| 永清县| 秦安县| 新田县| 砀山县| 沙河市| 景洪市| 永嘉县| 房产| 义马市| 乌鲁木齐县| 玛多县| 新巴尔虎右旗| 涞水县| 伊川县| 武定县| 金塔县| 府谷县| 阿合奇县| 宝山区| 海盐县|