安全性是java鼓吹得最多的特性之一,的确,java的安全特性涵盖了从应用级别到语言级别乃至jvm本身.以前大家都知道有个sandbox,但仅有sandbox尚不能满足,或者说不能很方便地做到我们所需要的全部安全需求,譬如现在一个系统首先起码需要一个登录功能,更进一步的话,还需要对用户访问资源的行为进行约束,下面我想大致讲一下java是怎样做这些事情的,基本上是一个总结或者说是“读后感”的性质,同时给出一个简单的实现例子,这个例子其实还是模仿人家的,呵呵……
1.java的访问控制机制谈到访问控制,或者说“授权”,这里有两层含义,一是从资源的角度,这个socket端口是否被允许操作?这个文件是可读的?可写的?还是可执行的?还是以上都行?这就是我们在unix下用“ls -l”命令列出当前目录下文件时,那些“-rwx-”之类的含义;二是从访问者的角度,我想通过80端口看web上新浪欧洲杯的新闻,在这个系统中有没有这个资格?我想播放d盘上一个名为“friends.rm”的视频文件,我得到了访问这个文件的权限了吗?我有运行播放器的权限吗? 【程序编程相关:the different ways o】
【推荐阅读:Research of JSTL - p】exception in thread "main" java.security.accesscontrolexception: access denied (……) 【扩展信息:配置CVS服务器和客户端完全解析 】 java在访问控制策略上同时考虑了这两方面内容,你说“不对呀,我用fileoutputstream写文件,用socket类连接远程主机都用得好好的,没什么限制呀”,这我们得先谈谈什么叫做“安全管理器”(securitymanger).安全管理器从jdk 1.0就开始有了,多古老啊!java从设计的那一天开始就考虑了安全因素,安全管理器是sandbox的最重要的一个部分,也是访问控制的总协调者,我们能够在通常情况下正常使用网络与文件,那是因为当启动application的时候(注意是application,不是applet!),如果你不加“-djava.security.manager”选项,jvm是不会启动sandbox的,这时你可以“为所欲为”,而不会碰到securityexception之类的异常;一旦加入了“-djava.security.manager”选项,你就会发现有一连串的异常出现喽!……java内置了一个默认的安全策略,这种情况下安全管理器首先装载的是这个默认的策略,不信啊,不信你检查一下你的“%java_home%\jre\lib\security\”目录,是不是有个叫“java.policy”的文件?用notepad打开看看:... 下一页