JAAS在Java Web Start中的设置

一、前言

  我这个AdminConsole项目是用Java Web Start(简称JWS)来让用户访问的,后来在用户登录部份用到了JAAS,而JAAS有一个登录配置文件的设定。过去,我一直是在Eclipse的Run里做设置“-Djava.security.auth.login.config=D:\wxxr\login.config”,如下图:

54bde01c02000043

  但这只是权宜之计,在将项目从本地以JWS发布到服务器就会碰到两个问题:(1)为了灵活,不能引用绝对地址的(2)在JWS中怎么设定对login.config的引用。

JAAS中对配置文件login.config的引用,主要有两种方法:
(1)动态配置:“-Djava.security.auth.login.config=D:\wxxr\login.config”。它其实是java.exe的一个参数,你可以像我一样在Eclipse的run里设置,也可以在命令行运行程序的方式中指定:c:\jdk\bin\java -Djava.security.auth.login.config=D:\wxxr\login.config -jar.......。
(2)在程序里静态配置:System.setProperty("java.security.auth.login.config", "D:\wxxr\login.config");

二、JWS中对JAAS动态配置的方法

  在JWS中,如果你想动态配置的,则在JWS的jnlp文件里设置如下:
 <resources>
  <j2se version="1.4+" href="http://java.sun.com/products/autodl/j2se"  java-vm-args="-Djava.security.auth.login.config=D:\wxxr\login.config" />
........  
 </resources>

或者

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

上面的设置有一个关键问题:对login.config引用的是绝对地址,这个地址不是指向服务器端的地址,而是客户端的地址。这也就要求客户在D:\wxxr\目录含有login.config文件,显然我们不能对客户有这种麻烦要求(最好就是客户什么都不用做,这也是JWS的存在的价值和目的)。
因此这里还有一个变通的方法:把“D:\wxxr\login.config”改成“http://your_website:8080/adminconsole/login.config”,这样就会去网上定位login.config,而不必再把login.config安装在客户端里了。


三、JWS中对JAAS静态配置的方法

在上面的用web url的方法中还是有一点缺陷,login.config将是可以被其他客户轻易看到的,安全性不高。而且服务器的网站名变了以后,还得相应修改jnlp文件。所以我们不妨考虑一下静态配置的方法,用静态配置方法之后,就不用在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/”,这个还是和前面web url其实一样,只不过它是动态获得web url。至于如何获得服务器的路径的那种,对于普通的java application我没研究过,我只试过下面eclipse RCP的。
(3)你只需要保证http://your_website:8080/adminconsole/login.config 能访问到login.config文件即可。

第二种:在Eclipse RCP程序中设置的方法

String path = AdminConsolePlugin.getDefault().find( new Path("properties/login.config")).toString();  // AdminConsolePlugin就是项目的那***Plugin.java文件,不同的项目会不同。
logger.info("login.config path=" + path);  // logger是log4j的一个对象,你可以把这一行删除
System.setProperty("java.security.auth.login.config", path);

  path的值有点怪,是“bundleentry://3/properties/login.config”。properties/login.config在服务器上的位置如下图:

54bde01c02000044
注:Eclipse RCP要装在JWS上,还得用一个开源软件WebRCP:http://sourceforge.net/projects/webrcp。此开源软件简单易用,连文档都不用看。它提供的webrcp-tutorial,本身就是一个RCP使用webrcp的例子,你只需要参照archives\tutorial.zip的目录结构将自己的RCP项目打包,然后用自己项目的zip替换掉archives\tutorial.zip即可。如果你想换一个zip名字,则需要修改tutorial.jsp文件(其实也是一个jnlp)中的“<property name=....>”相应的几项。


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值