JAAS在Java Web Start中的设置

简介:

一、前言

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

  但这只是权宜之计,在将项目从本地以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在服务器上的位置如下图:


注: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

目录
相关文章
|
1天前
|
Java Maven Spring
Java Web 应用中,资源文件的位置和加载方式
在Java Web应用中,资源文件如配置文件、静态文件等通常放置在特定目录下,如WEB-INF或classes。通过类加载器或Servlet上下文路径可实现资源的加载与访问。正确管理资源位置与加载方式对应用的稳定性和可维护性至关重要。
|
4天前
|
存储 安全 搜索推荐
理解Session和Cookie:Java Web开发中的用户状态管理
理解Session和Cookie:Java Web开发中的用户状态管理
17 4
|
28天前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
63 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
21天前
|
Java Linux iOS开发
如何设置 Java 的环境变量
设置Java环境变量是使用Java开发工具和运行Java程序的前提。主要步骤包括:安装JDK,配置系统环境变量中的JAVA_HOME、PATH和CLASSPATH,确保命令行可直接调用javac和java命令。
|
23天前
|
安全 Java Linux
java程序设置开机自启
java程序设置开机自启
|
3天前
|
Java 持续交付 项目管理
使用Maven进行项目管理:提高Java Web开发的效率
Maven 是一款强大的项目管理和构建自动化工具,广泛应用于Java社区。它通过依赖管理、构建生命周期管理、插件机制和多模块项目支持等功能,简化了项目的构建过程,提高了开发效率。本文将介绍Maven的核心功能及其在Java Web开发中的应用。
15 0
WK
|
9天前
|
安全 Java 编译器
C++和Java哪个更适合开发web网站
在Web开发领域,C++和Java各具优势。C++以其高性能、低级控制和跨平台性著称,适用于需要高吞吐量和低延迟的场景,如实时交易系统和在线游戏服务器。Java则凭借其跨平台性、丰富的生态系统和强大的安全性,广泛应用于企业级Web开发,如企业管理系统和电子商务平台。选择时需根据项目需求和技术储备综合考虑。
WK
10 0
|
1月前
|
编解码 前端开发 JavaScript
使用 CSS 打印样式为 Web 页面设置专业的打印机效果
使用 CSS 打印样式为 Web 页面设置专业的打印机效果
41 2
|
1月前
|
前端开发 Java API
JAVA Web 服务及底层框架原理
【10月更文挑战第1天】Java Web 服务是基于 Java 编程语言用于开发分布式网络应用程序的一种技术。它通常运行在 Web 服务器上,并通过 HTTP 协议与客户端进行通信。
22 1
|
23天前
|
监控 Java Linux
问题回顾:Unable to start web server; nested exception is org.springframework.boot.web.server.
解决“Unable to start web server; nested exception is org.springframework.boot.web.server.WebServerException”这一问题,关键在于细致的故障诊断和逻辑推理。从日志入手,逐步排查端口冲突、依赖问题、配置错误、资源限制、代码bug以及版本兼容性等多个方面,最终定位并解决根本原因。每一步操作都应谨慎且有针对性,确保修改一处后充分测试,避免引入新的问题。
40 0