0

如何配置java的jdk环境变量【精选20篇】

浏览

7716

范文

145

篇1:java试用期总结

范文类型:工作总结,全文共 922 字

+ 加入清单

在公司及部门领导和同事的关心和指导下,我时刻严格要求自己,遵守公司各项规章制度,与同事和谐相处,无论是思想上、工作上还是学习上,都取得了长足的发展和巨大的收获。

在未来的日子,我将努力做到以下几点:

一、思想上,做到积极向上。

在进入公司两个月的时间里,我自觉遵守公司的规章制度,履行岗位职责,兢兢业业做好本职工作,从未迟到早退,用满腔热情积极、认真地完成好每一项任务。平时生活中团结同事、不断提升自己的团队合作精神,以严谨的态度和积极的热情投身于学习和工作中。

二、工作上,做到尽职尽责。

今天我很荣幸的进入了公司信息分部工作,工作主要包括计算机软硬件的日常维护,办公设备的维护,门禁硬件和系统的维护,内部网络维护工作等。进入公司信息分部的两个多月时间我首先要了解各部门电脑的系统软件和硬件的使用情况,熟悉公司网络设备分布和使用情况,争取能够尽快独立处理各种计算机终端故障,做到领导满意,同事放心。

三、学习上,严格要求自己。

进入新的工作岗位首先要学会适应环境,所以我不断向身边的领导同事学习网络相关工作事项,养成了

良好的学习生活习惯,工作充实而有条理,为人热情大方,诚实守信,乐于助人,拥有自己的良好做事原则,能与同事们和睦相处。

未来,深入了解网络设备、系统知识,门禁系统故障处理等,我正在慢慢熟悉公司各部门及人员的分布情况,掌握本岗位的工作流程,争取更快、更好的处理各种故障。虽然我在以前单位学习了一些理论及实践经验,但是面对新的单位、新的岗位,我必须尽快了解岗位的工作流程,掌握公司相关制度知识,在平时的工作和学习中虚心向领导和同事学习。虽然只有短短的两个多月,但中间的收获是不可磨灭的,这与单位的领导和同事们的帮助是分不开的。

回顾这两个多月的工作,我对自己的表现很满意。虽然时间不长,但是在各位领导及同事的帮助下,我迅速的成长起来了。对工作也有了更加清晰的认识,对未来有了更加明确的目标。我会在以后的工作中加以百倍的热情,愿意和大家分享成功的方法和失败的教训,愿意在工作中和团队更加协作,为实现目标奉献自己的力量。

一个人的能力很微弱,但很多人的力量汇聚到一起就能发挥巨大的作用。在以后的日子里,我期待着和你们一起创造更多的价值,期待有更大的进步!

展开阅读全文

篇2:java求职信范文

范文类型:求职应聘,全文共 648 字

+ 加入清单

尊敬的领导:

您好!十分感谢您在百忙之中能翻阅我的自荐信。与公司是一种选择,与我则是一种机会。在上千份大同小异的求职信中,我期望你手中的这份能给您带来惊喜!

我叫张____,是____技术学院09级的一名专科生,就读于计算机技术与应用专业。主修课程:计算机组成原理,数据结构,java网络编程,c++编程基础,单片机基础,路由/交换机配置,jsp编程基础,计算机网络,sql server数据库设计,xml编程实现,编译原理。

大学四年来,我学习刻苦,成绩优异,曾多次获得奖学金。在师友的严格教益和个人努力下,我具备了扎实的基础知识。在软件方面,系统掌握了C语言,数据结构,Power Builder,数据库原理,汇编语言,软件工程等,并对面向对象的DELPHI和VC 等Windows编程有一定了解。课外我还自学了VB,VF编程及网页制作。现已能独立编写专业的数据库管理系统。在硬件方面,通过参与单片机设计,组装收音机,网络工程的规划与管理及组建等实践活动,我掌握了计算机的工作原理及计算机网络原理技术。

面对当今激烈的人才竞争,我很清楚自己知识有限,但我更清楚我有着不甘落后的精神和不断学习,不断提高的愿望。乐于进取,不怕挫折是我的人生信条,给我一次机会,让我去实践,去闯,去干,因为能力要在实践中培养,也终究要在实践中体现。我信心十足,相信我所具备的专业技能,积累的知识,加上有良好的人际关系,会帮助我掀开生活中的新一页。

收笔之际,祝贵公司生意兴隆,财源茂盛!

此致

敬礼

求职人:

20xx年XX月XX日

展开阅读全文

篇3:关于请求配置执法车辆的请示

范文类型:请示,全文共 233 字

+ 加入清单

市南区公务用车配备管理领导小组:

由于我局编制调整,新增物业、拆违等多项业务职能,工作量更趋繁重,现有车辆已远远不能满足正常工作的需要,影响了各项工作的全面开展。年初,我局曾向区政府上报申请增配13辆办公用车的报告,但至今车辆没有配发。现我局拆违办、物业中队没有办公车辆,公安城管大队没有运兵车,执法监察科和基层3个中队仍然使用超期报废车辆(已有4辆车进汽修厂大修),存在安全隐患。特申请先配备捷达轿车2辆,面包车2辆,大头车3辆。

当否,请批示!

二○xx年八月二十五日

展开阅读全文

篇4:java试用期总结

范文类型:工作总结,全文共 860 字

+ 加入清单

三个月的时间,将我从一个刚进门的小白变成了一个稳重且能独立处理任何问题的员工了。在这段时间里,我遇到了很多的难关,同时我也处理和解决了很多的难题。其实这就是一次成长的过程。无论是做什么,其实我们都是需要一颗坚定的决心的,所以很感谢公司愿意给我这个新人一次机会去学习和成长,也感谢在这个过程当中每一位支持我、鼓励我的同事和领导。试用期结束之后,我会再接再厉,继续把这份工作做到一个新的高度,不辜负任何一个人对我所寄予的希望!

还记得自己刚刚进公司的时候,非常的激动,因为我真的很想来到这个平台上,公司优秀的条件非常的吸引我。但是我也是很清楚的,自己刚刚毕业,很多地方都是空白的,所以我自知我是需要不断的学习和努力的。非常惊喜的是公司愿意给我一个机会,后来从经理那里得知,录用我是因为我性格不错,比较适合这份工作,可以进行培养。当时我听到之后,得到了很大的鼓励和肯定,更加激发我去努力和奋斗了。

这几个月走过来,我一直都在忙忙碌碌的工作和学习。我是一个做事很认真的人,平时只要是主管或者同事交给我的事情,我都会做好,并且做到接近完美。之所以这样,一是因为我想表现好自己,继续在公司留下去。二是我是一个很害怕被批评的人,所以我尽量会把自己的事情做到完美。三是我真的很珍惜这次机会和这个平台,所以我想尽自己全部的力量,为这个平台贡献出自己的价值。

这份工作是具有挑战的,但越是有挑战的工作就越有潜力。当初我之所以这么执着于这份工作也是因为我想通过这样的一个岗位去实现一个更强的自己。在这段时间里,我每天都在学习,并且一直在进步。趁着我现在还很年轻,还有很多的激情,我想或许我应该继续努力和奋斗下去。试用期结束了也代表着我可以转正了,其实这是一件很棒的事情,我也会珍惜这一次对我的肯定,我会把所有的激情和力量放在这份工作上,希望能够通过我的坚持,最终取得一个更好的成绩!

感谢这段时间里所有人默默对我的鼓励,即使有些同事没有让我知道曾经帮助过我,但其实我的心里都是非常清楚的。未来的日子,我会变得更强,希望可以帮助到大家!为公司争光发光!

展开阅读全文

篇5:java工程师转正申请书

范文类型:申请书,适用行业岗位:工程师,工程,全文共 838 字

+ 加入清单

尊敬的领导:

我于____年_月_日进入公司,根据公司的需要,目前担任java工程师 一职,负责 ___的开发工作。到今天3个月试用期已满,根据公司的规章制度,现申请转为公司正式员工。

软件开发是我自幼以来的志向,公司给了我这个工作,让我的梦想得以实现,也是我职业生涯的一个起点,我十分珍惜。通过三个月的不断学习,在项目开发中的不断锻炼以及同事、领导的帮助,我已逐渐融入这个大家庭,个人的工作技能也有了明显的提高,虽然仍有一些不足,但三个月以来我付出了不少,也收获了不少,我感觉自己成长了,也逐渐成熟了。

初到公司,加入了____部,加入了 ____ 项目组,我也曾担心自己不知道该怎么与项目组的同事沟通,担心不知道怎么做好工作,但是项目组的前辈们都很亲切,也很耐心的教导我,解答我的疑问,以及他们团结向上的精神,让我很快的熟悉了工作,融入了项目组。

在这三个月的学习和工作中,我一直严格要求自己,遵循公司的规章制度,认真完成领导布置的每一项任务,遇到的问题虚心的向项目组的前辈们学习、请教,不断的提高、充实自己。开发过程中出现的一些差错,也有前辈们耐心的指出和指导我修改,这些经历让我不断成熟,处理问题时考虑得更全面,杜绝类似情况的发生。在此我要特地感谢部门的领导和同事们对我的指引和帮助,感谢他们对我工作上失误的提醒和指正。

经过这三个月,我已经能独立进行开发任务,按时按质的完成分配的工作任务,当然还有许多不足,开发的经验仍有待提高,编写代码的简洁性和完整性也需要进一步增强,需要不断的继续学习以提高自己的工作能力。

总之,这三个月来我学到了很多,感悟了很多;看到公司的迅速发展,看到部门的同事越来越多,我深深地感到骄傲和自豪,也更加迫切的希望以一名正式员工的身份在这里工作,实现自己的奋斗目标,体现自己的人生价值,和公司一起成长。

在此我提出转正申请,恳请领导给我继续锻炼自己、实现理想的机会。我会用谦虚的态度和饱满的热情做好我的本职工作,为公司创造价值,同公司一起展望美好的未来!

展开阅读全文

篇6:java开发实习周记

范文类型:周记,全文共 449 字

+ 加入清单

前面做过的新豆商城,使用JDBC来连接数据库,现在学习了Hibernate,所以把所有连接数据库的代码转变成hibernate来连接。

为什么选择Hibernate:由于是对JDBC的轻易级封闭,内存消耗少,最快的运行效率。、开发效率高,Eclipse、JBuilder等主流 java集成开发环境对Hibernate有很好的支持,在大的项目,特别是持久层关系映射很复杂的情况下,Hibernate效率高的惊人。分布式,安全检查,集群,负载均衡的支持。轻量级封装,避免引入过多复杂的问题,调试容易,也减轻程序员的负担。具有可扩展性,API开放,当本身功能不够用的时候,可以自己遍码进行扩展。对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。

总结:通过hibernate连接,发现比以前用JDBC连接的代码量要少很多,简洁很多。唯一不好的是在XML的配臵文件中,经常会有错误。我相信,这只是我对hibernate不熟悉造成的,当对hibernate使用多了,这些问题就迎刃而解。

展开阅读全文

篇7:高级Java开发工程师的职责职能模板

范文类型:制度与职责,适用行业岗位:工程师,工程,全文共 391 字

+ 加入清单

职责:

1、后端java程序的设计和开发;

2、辅助进行系统需求分析和整体设计工作;

3、根据设计文档或需求说明完成代码编写、调试、测试和维护工作;

4、分析并解决软件开发过程中的问题;

5、协助测试工程师制定测试计划,定位发现的问题;

6、进行定期的code review,保证代码的可持续发展。

任职要求:

1、计算机软件或相关专业,本科及以上学历,4年以上java开发工作经验;

2、具备扎实的java基础,有一定的架构功底 ,熟悉redis、mongodb、mysql 、java高并发 ,有一定的金融技术底层设计能力

3、有spring、微服务、web等分布式开发经验 ,了解 tcp mvc springCloud

4、熟练使用 java8 tomcat git nginx redis、mongodb、mysql 消息队列、spring_cloud

5、积极主动较,强执行力和较好的沟通能力。

展开阅读全文

篇8:java试用期总结

范文类型:工作总结,全文共 959 字

+ 加入清单

回首过去是试用期工作期间,我学会了不少知识,iqc工作目的就是防止不符合要求的物料进入公司,制定进料检验标准,确实执行进料检验,熟悉检验方法以及了解抽样标准,检验工具仪器的熟练使用,对于相关记录和文档(来料记录、工程文件、作业指导书等)的有效收集、保存、管理。

对于不良品后续处理,特采后的可追溯性跟踪,一定的不良原因分析的能力,对工作现场的管理能力,包括5s(物料安全整齐的摆放移动、工具安全放置和使用、现场温湿度的控制),遇到突发事件如加急物料检验、急料返工,相关部门工程支持时,人员、场地、工作方法,相关设备的安排布置,并做好及时记录。

iqc的kpi:漏检率:每月产线发现的来料批不良数(确保的确为来料不良,而不是因公司自身原因照成的,仓库保存条件是否符合要求,物料搬运过程是否按要求,是否属于自然失效的物料。来料或急料的平均检验时间和效率。供应商提供检验报告,合格证、数量等标识,是否有混料,错料,少料等现象。

建议与改善:1。建议样品及封样分两块来管理,之前使用物料来料时进行登记,可按正常物料放行,每周进行总结一次,新物料及新供应商来料时建立体系,未确认的供应商及物料不得采购,未确认的物料不得入库,iqc来料不发单直接使用待处理标,由物控自行处理好样品及承认书后再送检iqc,对于特别急的物料,要求由研发部首先进行样品的初步确认后才能进行评审。

2。对于iqc设备事宜,建议增加晶振测试仪及针规、100mhz电桥、带标尺测量的放大镜一套等设备用于检验,以保证来料品质。

3、建立供应商品质检讨系统,每月对供应商所发生的问题进行检讨,由供应商品质部及工程部等相关部门组织人员到我司进行检讨。

4、加强工艺方面的技术支持,多提供工艺工程师的交流平台,必要时可送外培训。

5、建立公司技术奖金制度,对于公司技术突破有贡献的实行奖金制度,以提高公司技术力量。

6、对增加部件电性测试进行完善,保证测试过程准确及测试时对部件本身的保护。

7、增加对iqc进行相关物料的行业/国标标准方面的学习,掌握对检验物料的标准,确保对来料品质的控制。

8、完善现有的检验标准,使来料能得到全面管控。

9、对样品及承认书进行管控,使每个检验员对检验的产品的依据。

10、参照供应商及其它公司方法,提供iqc产品试验设备解决方案,以保证接产品来料品质。

展开阅读全文

篇9:高级Java开发工程师的职责职能模板

范文类型:制度与职责,适用行业岗位:工程师,工程,全文共 351 字

+ 加入清单

职责:

1、 负责平台系统的开发工作;

2、 参与系统设计以及核心代码的编写;

3、 处理日常发现的问题,配合各部门需求完成系统流程优化工作;

4、 参与重大项目的技术方案设计及技术评审,把握复杂系统的设计,确保系统的架构质量;

5、 为团队引入创新的技术、创新的解决方案,用创新的思路解决问题。

任职要求:

1、大专及以上学历,计算机相关专业,1年以上Web/PHP开发经验;

2、熟练掌握 HTML/CSS 和 javaScript 等 WEB 开发技术,熟练掌握 PHP语言,熟悉数据库Mysql,拥有优秀的数据库设计能力,熟悉php安全开发规范;

3、有在线教育类项目开发经验优先,能处理高并发;

4、熟悉设计模式和算法,深入了解PHP的性能最优化和安全最大化;

5、为人诚实正直,工作主动,有强烈的责任感和事业心。

展开阅读全文

篇10:关于java实习心得总结

范文类型:心得体会,工作总结,全文共 2418 字

+ 加入清单

经过一个学期的学习,java的课程已经结束了。可是我知道,学习java的路上,我们才刚刚起步。学Java之前我听许多人说Java很难,学了之后我感觉Java确实不容易,想学好它并非易事。我觉得学Java必须做到三步走:

1.课前认真预习。

2.课上认真听讲。

3.课下认真复习。

我想只有做好这三步,自己才能跟上老师的步子。

回想一下学习Java时的情景,我仍然兴奋不已。其实在刚接触Java时,自己确实有点晕,但经过一段时间学习,逐渐走出了迷雾。刚开始学习循环时,我觉得那一块很不熟悉,做题时,思路半天才理出来。经过一段时间的练习,我渐渐的走出了第一个迷雾。但是到了

第六章,我彻底晕了,看书看得也一知半解晕晕乎乎的。类与对象是在学了第七、八章后弄清的。到了最后一章,学到字符串时,传递参数真让我晕啊,然后我又是练习,最后略微弄明白了点。我总结了我学Java的特点:先是不懂,后明白,再次不懂,又明白,又一次晕,最后弄清。经过三起三落,经过几个迷雾之后,我对Java也有了更为深入的了解,就学会了Java。

Java学起来很有趣,通过学习Java可以提高自己的逻辑能力。在学习Java期间我们做了一些程序,我们班的同学也都积极准备,完成的还不错!在做程序时,我遇到了一些难题,有时也会出现错误,时间长了弄得我心烦意乱,但是我知道只有坚持下去才会成功。 因为Java是一种面向对象的编程语言,刚接触Java的人可能会感觉比较抽象,不过没关系不用着急,上课的时候认真听老师讲解,一些概念知识慢慢去理解,课后多做练习,熟能生巧,哪怕是你的记性再好,课后不去强化练习也没用,只有多练了,当你在做项目时你才能很熟练的写出你想要代码。平日在练习时若遇到不会的题目或是在项目中遇到解决不了的问题,首先不要急着去问老师,或是急着上百度搜答案,那样即使你得到了正确答案,以后在其它地方遇到同样的问题,你还是不知道怎么解决!所以说,在遇到问题时,自己先想想要怎么解决,回顾一下老师上课的内容,如果自己还是想不出什么好方法的话,也可以向同学请教请教,三人行必有我师,你不懂的地方其他同学可能知道。如果还是没能解决,那只有问老师或是上网搜索查找相应的解决方法了。好好理解其解决思路。真的弄不懂时我就问同学一起解决。通过几个阶段的练习,我觉得又把学过的知识复习了一遍,通过同学之间的交流沟通,我觉得我们班的学习氛围更加浓厚了。

我觉得把Java学会的关键一点就是坚持练习。学习Java时每天必须保证一定量的练习,我们老师也说学习编程语言没有捷径可走。真的,只有每天反复操作了,经常写代码了,我们在遇到问题时才有一定的思路。欲速则不达,学习编程语言需要一个比较漫长的阶段,不能一步登天,这需要一个过程,在这个过程中慢慢积累经验,扎实基础。不要以为写出了一个简单的小程序,就认为自己已经学的很好了,这只不过是在你学习编程过程中一个小小的实践。不要满足于现状,要不断完善自己的知识体系,善于总结实践经验。要端正自己的学习态度,是主动去学,而不是被动!提高自学能力。学习编程的秘诀是:编程、编程、再编程。不仅要多实践,而且要快实践。

我们在看书的时候,不要等到你完全理解了才动手敲代码,而是应该在看书的同时敲代码,程序运行的各种情况可以让你更快更牢固的掌握知识点。程序代码是软件开发最重要的成果之一,其中渗透了程序员的思想与灵魂。当你学习一个类以后,你就可以自己写个简单的例子程序来运行一下,看看有什么结果,然后再多调用几个类的方法,看看运行结果,这样非常直观的把类给学会了,而且记忆非常深刻。然后不应该满足把代码调通,你应该想想看如果我不这样写,换个方式,再试试行不行。记得哪个高人说过学习编程就是个破坏的过程,把书上的例子,自己学习Documentation编写的例子在运行通过以后,不断的尝试着用不同的方法实现,不断的尝试破坏代码的结构,看看它会有什么结果。通过这样的方式,你会很彻底的很精通的掌握Java。举个例子,我们都编过Hello World ,一开始很多同学不是很理解为什么main方法一定要这样来定义public static void main(String args),能不能不这样写? 我刚也有这样的疑问。想知道答案吗?很简单,你把main改个名字运行一下,看看报什么错误,然后根据出错信息进行分析;把main的public取掉,在试试看,报什么错误;static去掉还能不能运行;不知道main方法是否一定要传一个String数组的,把String改掉,改成int,或者String试试看;不知道是否必须写args参数名称的,也可以把args改成别的名字,看看运行结果如何。我当初学习Java的时候就是这样做的,把Hello World程序反复改了七八次,不断运行,分析运行结果,最后就彻底明白为什么main方法是这样定义的了。这样虽然比较费时间,不过一个例子程序这样反复破坏几次之后。我就对这个相关的知识彻底学通了。有时候甚至故意写一些错误的代码来运行,看看能否得到预期的运行错误。这样对于编程的掌握是及其深刻的。

对学习编程来说,不要求英语,但不能一点不会,。最起码像JAAPI文档这些东西还是要能看懂的,连猜带懵都可以;旁边再开启一个"金山词霸"。看多了就会越来越熟练。在学JA的同时学习英文,一箭双雕多好。另外好多软件需要到英文网站下载,你要能够找到它们,这些是最基本的要求。英语好对你学习有很大的帮助。

学习Java这段时间,有时候会觉得有点苦,但是我觉得正是有了你奋斗时的苦,才能换来学成后的甜。当你经过认真写代码做完一个项目时,你会有一种成就感。心里有一种说不出的喜悦之情。

学习Java靠得是韧劲,靠得是拼劲,考得是坚持不懈。如果做好了这几点,我想Java对你来说不会太难。还有,你自己要有信心,相信自己能学会。以上就是我在学了Java后的一些感言。

展开阅读全文

篇11:java读书心得

范文类型:心得体会,全文共 36011 字

+ 加入清单

注:框架可以用word菜单中的 “视图/文档结构图” 看到

j2ee模式

value object(值对象) 用于把数据从某个对象/层传递到其他对象/层的任意java对象。

通常不包含任何业务方法。

也许设计有公共属性,或者提供可以获取属性值的get方法。

jsp

1.jsp的基础知识

__

_____ | directive (指令)

| |-- scripting (脚本)

jsp -------| |__ action (动作)

|

|_____template data :除jsp语法外,jsp引擎不能解读的东西

1)在jsp中使用的directive(指令)主要有三个:

a) page指令

b) include指令

c) taglib指令

在jsp的任何地方,以任何顺序,一个页面可以包含任意数量的page指令

2)scripting(脚本)包括三种类型

a) ;

b) ;

c) ;

3)action(动作)

标准的动作类型有:

a) ;

b) ;

d) ;

e) ;

f) ;

g) ;

h) ; 日记日记300字

1. 注释: ;

;

2. ;

session可以不赋值,默认为true,如果session=”false”,则在jsp页面中,隐含的变量session就不能使用。

3. 请求控制器结构(request controller)

也被称之为jsp model 2 architecture

这种途径涉及到使用一个servlet或一个jsp作为一个应用程序或一组页面的入口点。

为创建可维护的jsp系统,request controller是最有用的方式之一。

不是jsp,而是java类才是放置控制逻辑的正确的地方。

请求控制器的命名模式为: controller.jsp

请求控制器类的命名模式为: requestcontroller

2.jsp中的javabean

jsp三种bean的类型

1) 页面bean

2) 会话bean

3) 应用bean

大多数的系统会使用一个会话bean来保持状态,而对每一个页面使用一个页面bean 来对复杂的数据进行表示。

页面bean是一个模型,而jsp是一个视图。

3.custom tag

bean是信息的携带者,

而tag更适用于处理信息。

标记库包含一个标记库描述符(tld)和用于实现custom tag的java类

在翻译阶段,jsp容器将使用tld来验证页面中的所有的tag是否都被正确的使用。

标记处理程序只是一个简单的适配器,而真正的逻辑是在另一个类中实现的,标记处理程序只是提供了一个供其他的可复用的类的jsp接口

servlet

1.servletconfig

 一个servletconfig对象是servlet container在servlet initialization的时候传递给servlet的。

servletconfig包涵 servletcontext 和 一些 name/value pair (来自于deployment descriptor)

 servletcontext接口封装了web应用程序的上下文概念。

2.会话跟踪

1) session

 当一个client请求多个servlets时,一个session可以被多个servlet共享。

 通常情况下,如果server detect到browser支持cookie,那么url就不会重写。

2) cookie

 在java servlet中,如果你光 cookie cookie = new cookie(name,value)

那么当用户退出browser时,cookie会被删除掉,而不会被存储在客户端的硬盘上。

如果要存储 cookie,需加一句 cookie.setmaxage(200)

 cookie是跟某一个server相关的,运行在同一个server上的servlet共享一个cookie.

3) url rewriting

在使用url rewriting来维护session id的时候,每一次http请求都需要encodeurl

典型的用在两个地方

1) out.print(“form action=” ”);

out.print(response.encodeurl(“sessionexample”));

out.print(“form action=” ”);

out.print(“method = get>;”);

2) out.print(“

;

out.print(response.encodeurl(“sessionexample?database=foo&datavalue=bar”));

out.println(“” >;url encoded ;”);

3.singlethreadmodel

默认的,每一个servlet definition in a container只有一个servlet class的实例。

只有实现了singlethreadmodel,container才会让servlet有多个实例。

servlet specification上建议,不要使用synchronized,而使用singlethreadmodel。

singlethreadmodel(没有方法)

保证servlet在同一时刻只处理一个客户的请求。

singlethreadmodel是耗费资源的,特别是当有大量的请求发送给servlet时,singlethreadmodel的作用是使包容器以同步时钟的方式调用service方法。

这等同于在servlet的service方法种使用synchronized.

single thread model一般使用在需要响应一个heavy request的时候,比如是一个需要和数据库打交道的连接。

2. 在重载servlet地init( )方法后,一定要记得调用super.init( );

3. the client通过发送一个blank line表示它已经结束request

而the server通过关闭the socket来表示response已结束了。

4. 一个http servlet可以送三种东西给client

1) a single status code

2) any number of http headers

3) a response body

5. servlet之间信息共享的一个最简单的方法就是

system.getproperties.put(“key”,”value”);

6. post和get

post:将form内各字段名称和内容放置在html header内传送给server

get: ?之后的查询字符串要使用urlencode,经过urlencode后,这个字符串不再带有空格,以后将在server上恢复所带有的空格。

get是web上最经常使用的一种请求方法,每个超链接都使用这种方法。

7. web.xml就是web applicatin 的deployment descriptor

作用有:组织各类元素

设置init param

设置安全性

8. request dispatcher用来把接收到的request forward processing到另一个servlet

要在一个response里包含另一个servlet的output时,也要用到request dispatcher.

9. servlet和jsp在同一个jvm中,可以通过serveltcontext的

setattribute( )

getattribute( )

removeattribute( )

来共享对象

10. 利用request.getparameter( )得到的string存在字符集问题。

可以用 strtitle = request.getparameter(“title”);

strtitle = new string(strtitle.getbytes(“8859-1”),”gb2312”);

如果你希望得到更大得兼容性

string encoding = response.getcharacterencoding;

//确定application server用什么编码来读取输入的。

strtitle = new string(strtitle.getbytes(encoding),”gb2312”);

xml

1.xml基础知识

1. 一个xml文档可以分成两个基本部分:

首部( header )

内容( content )

2. xml名字空间规范中指定:

xml文档中的每一个元素都处在一个名字空间中;如果没有指定的名字空间,缺省的名字空间就是和该元素相关联的名字空间。

3. a document that is well-formed obeys all of the rules of xml documents (nested tags, etc.)

" if a well-formed document uses a document type definition (more on these in a minute), and it follows all the rules of the dtd, then it is also a valid document

4. a tag is the text between the ;

" an element is the start tag, the end tag,and everything (including other elements) in between

5. 标签( tags ) 实际上包含了“元素”( elements ) 和 “属性”( attributes )两部分。

用元素( elements )来描述有规律的数据。

用属性( attributes ) 来描述系统数据。

如果你有一些数据要提供给某个应用程序,该数据就可能要用到一个元素。

如果该数据用于分类,或者用于告知应用程序如何处理某部分数据,或者该数据从来没有直接对客户程序公开,那么它就可能成为一种属性。

6. cdata (读作:c data ) c是character的缩写。

.xml.sax.reader

/|

org.xm.l.sax.xmlreader

/|

org.apche.xerces.parsers.saxparser

2.webservice

2.1 webservice的基本概念

webservice是一种可以接收从internet或者intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。

这种技术允许网络上的所有系统进行交互。随着技术的发展,一个web服务可以包含额外的指定功能并且可以在多个b2b应用中协作通讯。

web服务可以理解请求中上下文的关系,并且在每一个特定的情况下产生动态的结果。这些服务会根据用户的身份,地点以及产生请求的原因来改变不同的处理,用以产生一个唯一的,定制的方案。这种协作机制对那些只对最终结果有兴趣的用户来说,是完全透明的。

uddi

在用户能够调用web服务之前,必须确定这个服务内包含哪些商务方法,找到被调用的接口定义,还要在服务端来编制软件。所以,我们需要一种方法来发布我们的web服务。

uddi (universal description, discovery, and integration) 是一个主要针对web服务供应商和使用者的新项目。uddi 项目中的成员可以通过uddi business registry (ubr) 来操作web服务的调用,ubr是一个全球性的服务。

web服务供应商可以在ubr中描述并且注册他们的服务。

用户可以在ubr中查找并定位那些他们需要的服务。

uddi是一种根据描述文档来引导系统查找相应服务的机制。

uddi包含标准的“白皮书”类型的商业查询方式,

“黄皮书”类型的局部查找,以及

“绿皮书”类型的服务类型查找。

uddi利用soap消息机制(标准的xml/http)来发布,编辑,浏览以及查找注册信息。它采用xml格式来封装各种不同类型的数据,并且发送到注册中心或者由注册中心来返回需要的数据。

wsdl

对于商业用户来说,要找到一个自己需要使用的服务,他必须知道如何来调用。

wsdl (web services description language) 规范是一个描述接口,语义以及web服务为了响应请求需要经常处理的工作的xml文档。这将使简单地服务方便,快速地被描述和记录。

以下是一个wsdl的样例:

targetnamespace=""

xmlns:tns="" (5)(6)(7)(8)(9)(10)(11)(12)(13)(14)(15)

xmlns:xsd1=""

xmlns:soap=";

xmlns=";>;

xmlns=";>;

type="tns:stockquoteporttype">;

transport=";/>;

soapaction=""/>;

;my first service;

它包含了以下的关键信息:

消息的描述和格式定义可以通过xml文档中的;和; 标记来传送。

; 标记中表示了消息传送机制。 (e.g. request-only, request-response, response-only) 。

; 标记指定了编码的规范 。

; 标记中表示服务所处的位置 (url)。

wsdl在uddi中总是作为一个接口描述文档。因为uddi是一个通用的用来注册wsdl规范的地方,uddi的规范并不限制任何类型或者格式描述文档。这些文档可能是一个wsdl文档,或者是一个正规的包含导向文档的web页面,也可能只是一个包含联系信息的电子邮件地址。

现在java提供了一个 java api for wsdl (jwsdl)规范。它提供了一套能快速处理wsdl文档的方法,并且不用直接对xml文档进行操作,它会比jaxp更方便,更快速。

soap

当商业用户通过uddi找到你的wsdl描述文档后,他通过可以simple object access protocol (soap) 调用你建立的web服务中的一个或多个操作。

soap是xml文档形式的调用商业方法的规范,它可以支持不同的底层接口,象http(s)或者smtp。

之所以使用xml是因为它的独立于编程语言,良好的可扩展性以及强大的工业支持。之所以使用http是因为几乎所有的网络系统都可以用这种协议来通信,由于它是一种简单协议,所以可以与任何系统结合,还有一个原因就是它可以利用80端口来穿越过防火墙。

soap的强大是因为它简单。soap是一种轻量级的,非常容易理解的技术,并且很容易实现。它有工业支持,可以从各主要的电子商务平台供应商那里获得。

从技术角度来看,soap详细指明了如何响应不同的请求以及如何对参数编码。一个soap封装了可选的头信息和正文,并且通常使用http post方法来传送到一个http 服务器,当然其他方法也是可以的,例如smtp。soap同时支持消息传送和远程过程调用。以下是一个soap请求。

post /stockquote http/1.1

host: www.stockquoteserver

content-type: text/xml; charset="utf-8"

content-length: nnnn

soapaction: "some-uri"

xmlns:soap-env=";

〖5〗〖6〗〖7〗〖8〗〖9〗〖10〗〖11〗〖12〗〖13〗〖14〗〖15〗

soap-env:encodingstyle=";/>;

;sunw;

jaxr

为了支持uddi在java平台上的功能,java apis for xml registries (jaxr)允许开发者来访问注册中心。

值得注意的是,jaxr并不是建立web服务必需的,你可以利用其他常用的xml apis来直接集成这些协议。

jaxr是一个方便的api,它提供了java api来发布,查找以及编辑那些注册信息。它的重点在于基于xml的b2b应用,复杂的地址本查找以及对xml消息订阅的支持等web服务。

它也可以用来访问其他类型的注册中心,象ebxml注册中心。

这些对web服务的注册信息进行的操作,可以使用当前的一些web服务工具来完成(例如第三方的soap和ebxml消息工具)。另外,当jaxp提供了一致并具有针对性的api来完成这些操作,这将使开发变得更加容易。

jax/rpc

为了使开发人员专注于建立象soap那样的基于xml的请求,jcp正在开发基于rpc (jax/rpc) 的java api。jax/rpc是用来发送和接收方法调用请求的,它基于xml协议,象soap,或者其他的象xmlp (xml protocol,要了解更多可以参考)。jax/rpc使你不用再关注这些协议的规范,使应用的开发更快速。不久,开发人员就不用直接以xml表示方法调用了。

目前有很多第三方实现了soap,开发人员可以在不同的层次上调用soap,并选择使用哪一种。将来,jax/rpc会取代这些apis并提供一个统一的接口来构造以及处理soap rpc请求。

在接收一个从商业伙伴那里过来的soap请求的时候,一个java servlet用jax/rpc来接收这个基于xml的请求。一旦接收到请求后,servlet会调用商务方法,并且把结果回复给商业伙伴。

jaxm

当从商业合作伙伴那里接收一个web服务的请求时,我们需要java api实现一个servlet来处理ebxml消息,就象我们用jax/rpc来处理soap请求一样。

java api for xml messaging (jaxm) 是集成xml消息标准(象ebxml消息或者soap消息)的规范。

这个api是用来推动xml消息处理的,它检测那些预定单的消息格式以及约束。它控制了所有的消息封装机制,用一种直观的方式分割了消息中的信息,象路由信息,发货单。这样,开发人员只要关注消息的有效负载,而不用去担心那些消息的重复处理。

目前的开发人员用jaxp来实现jaxm将要提供的功能,jaxm将会提供一套非常具有针对性的api来处理基于xml的消息传送。这将大大简化开发人员的代码,并使它们具有统一的接口。

jaxm和jax/rpc的差别在于处理消息导向的中间件以及远程过程调用的不同。jaxm注重于消息导向,而jax/rpc是用来完成远程过程调用的。以下是图解。

请注意,在jaxm 和 jax/rpc技术成熟之前,开发人员还是依赖于第三方的soap apis,象apache soap, idooxoap, 以及 glue。当jaxm 和 jax/rpc正式发布后,它将为当前不同的soap和ebxml消息提供统一的接口。就象jdbc位多种不同的数据库提供统一的接口。

jaxb

xml绑定技术可以把xml文档和java对象进行自由转换。

用jaxb,你可以在后台的ejb层,把xml文档转换成java对象。同样你也可以把从ejb中取出的java对象转换成xml文档返回给用户。

jaxb接口提供了比sax和dom更高级的方法来处理xml文档。它提供的特性可以在xml数据和java类之间互相映射,提供了一个简单的方法来转换xml数据。它比逐个解析标记更简单。

2.2 建立weservice的步骤

在建立weservice的时候,有三个主要步骤:

1.建立客户端联接

为了允许applets,applications,商业合作伙伴,浏览器和pdas 使用web服务。

2.实现web服务

包括工作流,数据传送,商业逻辑以及数据访问。这些功能是隐藏在web服务后,并且为客户端工作的。

3.联接后台系统

这个系统可能包括一个或多个数据库,现存的企业信息系统,商业合作伙伴自己的系统或者web服务,以及在多个系统中共享的数据。

基于j2ee的web服务的核心构架:

rmi

1. rmi-iiop

2. rmi 是在java中使用remote method invocation的最初的方法,rmi使用java.rmi包

rmi-iiop 是rmi的一个特殊版本,rmi-iiop可以和corba兼容,rmi-iiop使用java.rmi包和javax.rmi

jaf(java活动构架)

开发者可以使用jaf来决定任意一块数据的类型、封装对数据的访问、寻找合适的操作、实例化相关的bean来执行这些操作等。

例如,javamail就是使用jaf根据mime类型来决定实例化那一个对象。

ejb

1. ejb组件实现代码的限制

ejb组件的约束

ejb的开发者并不需要在ejb的组件实现代码中编写系统级的服务,ejb提供商/开发

者需知道并且严格地遵守一些限制,这些限制与开发稳定的和可移植的ejb组件的利益有

关。

以下是你应该回避使用的一些java特色,并且在你的ejb组件的实现代码中要严格限

制它们的使用:

1.使用static,非final 字段。建议你在ejb组件中把所有的static字段都声明为final型的。这样可以保证前后一致的运行期语义,使得ejb容器有可以在多个java虚拟机之间分发组件实例的灵活性。

2.使用线程同步原语来同步多个组件实例的运行。避免这个问题,你就可以使ejb容器灵活的在多个java虚拟机之间分发组件实例。

3.使用awt函数完成键盘的输入和显示输出。约束它的原因是服务器方的商业组件意味着提供商业功能而不包括用户界面和键盘的i/o功能。

4.使用文件访问/java.io 操作。ejb商业组件意味着使用资源管理器如jdbc来存储和检索数据而不是使用文件系统api。同时,部署工具提供了在部署描述器(descriptor)中存储环境实体,以至于ejb组件可以通过环境命名上下文用一种标准的方法进行环境实体查询。所以,使用文件系统的需求基本上是被排除了。

5.监听和接收socket连接,或者用socket进行多路发送。ejb组件并不意味着提供网络socket服务器功能,但是,这个体系结构使得ejb组件可以作为socket客户或是rmi客户并且可以和容器所管理的环境外面的代码进行通讯。

6.使用映象api查询ejb组件由于安全规则所不能访问的类。这个约束加强了java平台的安全性。

7.欲创建或获得一个类的加载器,设置或创建一个新的安全管理器,停止java虚拟机,改变输入、输出和出错流。这个约束加强了安全性同时保留了ejb容器管理运行环境的能力。

8.设置socket工厂被urls serversocket,socket和stream handler使用。避免这个特点,可以加强安全性同时保留了ejb容器管理运行环境的能力。

9.使用任何方法启动、停止和管理线程。这个约束消除了与ejb容器管理死锁、线程

和并发问题的责任相冲突的可能性。

通过限制使用10-16几个特点,你的目标是堵上一个潜在的安全漏洞:

10.直接读写文件描述符。

11.为一段特定的代码获得安全策略信息。

12.加载原始的类库。

13.访问java一般角色所不能访问的包和类。

14.在包中定义一个类。

15.访问或修改安全配置对象(策略、安全、提供者、签名者和实体)。

16.使用java序列化特点中的细分类和对象替代。

17.传递this引用指针作为一个参数或者作为返回值返回this引用指针。你必须使用

sessioncontext或entitycontext中的getejbobject的结果。

java2平台的安全策略

以上所列的特点事实上正是java编程语言和java2标准版中的标准的、强有力的特色。ejb容器允许从j2se中使用一些或全部的受限制的特色,尽管对于ejb组件是不可用的,但需通过j2se的安全机制来使用而不是通过直接使用j2se的api。

java2平台为ejb1.1规范中的ejb容器所制定的安全策略定义了安全许可集,这些许可在ejb组件的编程限制中出现。通过这个策略,定义了一些许可诸如:java.io.filepermission,.netpermission,java.io.reflect.reflectpermission,java.lang.security.securitypermission,以便加强先前所列出的编程限制。

许多ejb容器没有加强这些限制,他们希望ejb组件开发者能遵守这些编程限制或者是带有冒险想法违背了这些限制。违背这些限制的ejb组件,比标准方法依赖过多或过少的安全许可,都将很少能在多个ejb容器间移植。另外,代码中都将隐藏着一些不确定的、难以预测的问题。所有这些都足以使ejb组件开发者应该知道这些编程限制,同时也应该认真地遵守它们。

任何违背了这些编程限制的ejb组件的实现代码在编译时都不能检查出来,因为这些特点都是java语言和j2se中不可缺少的部分。

对于ejb组件的这些限制同样适用于ejb组件所使用的帮助/访问(helper/access)类,j2ee应用程序使用java文档(jar)文件格式打包到一个带.ear(代表enterprise archive)扩展名的文件中,这个ear文件对于发送给文件部署器来说是标准的格式。ear文件中包括在一个或多个ejb-jar文件中的ejb组件,还可能有ejb-jar所依赖的库文件。所有ear文件中的代码都是经过深思熟虑开发的应用程序并且都遵守编程限制和访问许可集。

未来版本的规范可能会指定通过部署工具来定制安全许可的能力,通过这种方法指定了一个合法的组件应授予的许可权限,也指定了一个标准方法的需求:如从文件系统中读文件应有哪些要求。一些ejb容器/服务器目前在它们的部署工具中都提供了比标准权限或多或少的许可权限,这些并不是ejb1.1规范中所需要的。

理解这些约束

ejb容器是ejb组件生存和执行的运行期环境,ejb容器为ejb组件实例提供了一些服务如:事务管理、安全持久化、资源访问、客户端连接。ejb容器也负责ejb组件实例整个生命期的管理、扩展问题以及并发处理。所以,ejb组件就这样寄居在一个被管理的执行环境中--即ejb容器。

因为ejb容器完全负责ejb组件的生命期、并发处理、资源访问、安全等等,所以与容器本身的锁定和并发管理相冲突的可能性就需要消除,许多限制都需要使用来填上潜在的安全漏洞。除了与ejb容器责任与安全冲突的问题,ejb组件还意味着仅仅聚焦于商务逻辑,它依赖于ejb容器所提供的服务而不是自己来直接解决底层的系统层的问题。 3 4 5 6 7 8 9 10 11 12 13 14 15

可能的问题

通常,ejb组件在容器之间的移植不可避免地与如下问题相关:

1.它需要依靠的受限制的特点在特定ejb容器中没有得到加强。

2.它需要依靠的非标准的服务从容器中可获得。

为了保证ejb组件的可移植性和一致的行为,你应该使用一个具有与java2平台安全

策略集相一致的策略集的容器来测试ejb组件,并且其加强了前述的编程限制。

总结

ejb组件开发者应该知道这些推荐的关于ejb组件的编程限制,明白它们的重要性,并且从组件的稳定性和可移植性利益方面考虑来遵循它们。因为这些编程限制能阻止你使用标准的java语言的特点,违背了这些编程限制在编译时不会知道,并且加强这些限制也不是ejb容器的责任。所有这些原因都使你应很小心地遵守这些编程限制,这些限制在组件的合同中已经成为了一个条款,并且它们对于建造可靠的、可移植的组件是非常重要的。

2. 优化ejb

entity bean为在应用程序和设计中描述持久化商业对象(persistent business objec ts)提供了一个清晰的模型。在java对象模型中,简单对象通常都是以一种简单的方式进行处理但是,很多商业对象所需要的事务化的持久性管理没有得到实现。entity bean将持久化机制封装在容器提供的服务里,并且隐藏了所有的复杂性。entity bean允许应用程序操纵他们就像处理一个一般的java对象应用。除了从调用代码中隐藏持久化的形式和机制外,entity bean还允许ejb容器对对象的持久化进行优化,保证数据存储具有开放性,灵活性,以及可部署性。在一些基于ejb技术的项目中,广泛的使用oo技术导致了对entity bean的大量使用,sun的工程师们已经积累了很多使用entity bean的经验,这篇文章就详细阐述的这些卡发经验:

*探索各种优化方法

*提供性能优化和提高适用性的法则和建议

*讨论如何避免一些教训。

法则1:只要可以,尽量使用cmp

cmp方式不仅减少了编码的工作量,而且在container中以及container产生的数据库访问代码中包括了许多优化的可能。container可以访问内存缓冲中的bean,这就允许它可以监视缓冲中的任何变化。这样的话就在事物没有提交之前,如果缓存的数据没有变化就不用写到数据库中。就可以避免许多不必要的数据库写操作。另外一个优化是在调用find方法的时候。通常情况下find方法需要进行以下数据库操作:

查找数据库中的纪录并且获得主键

将纪录数据装入缓存

cmp允许将这两步操作优化为一步就可以搞定。[具体怎么做我也没弄明白,原文没有具体阐述]

法则2:写代码时尽量保证对bmp和cmp都支持

许多情况下,ejb的开发者可能无法控制他们写的bean怎么样被部署,以及使用的container是不是支持cmp.

一个有效的解决方案是,将商业逻辑的编码完全和持久化机制分离。再cmp类中实现商业逻辑,然后再编写一个bmp类,用该类继承cmp类。这样的话,所有的商业逻辑都在cmp类中,而持久化机制在bmp中实现。[我觉得这种情况在实际工作中很少遇到,但是作者解决问题的思路值得学习]

法则3:把ejbstore中的数据库访问减小到最少。

如果使用bmp,设置一个缓存数据改变标志dirty非常有用。所有改变数据库中底层数据的操作,都要设置dirty,而在ejbstore中,首先检测dirty的值,如果dirty的值没有改变,表明目前数据库中的数据与缓存的一致,就不必进行数据库操作了,反之,就要把缓存数据写入数据库。

法则4:总是将从lookup和find中获得的引用进行缓存。(cache)

引用缓存对session bean和entity bean 都是适用的。

通过jndi lookup获得ejb资源。比如datasource,bean的引用等等都要付出相当大的代价。因此应该避免多余的lookup.可以这样做:

将这些引用定义为实例变量。

从setentitycontext(session bean使用setsessioncontext)方法查找他们。setentitycontext方法对于一个bean实例只执行一次,所有的相关引用都在这一次中进行查找,这样查找的代价就不是那么昂贵了。应该避免在其他方法中查找引用。尤其是访问数据库的方法:ejbload和ejbstore,如果在这些频繁调用的方法中进行datasource的查找,势必造成时间的浪费。

调用其他entity bean的finder方法也是一种重量级的调用。多次调用finder方法的代价非常高。如果这种引用不适合放在setentitycontext这样的初始化时执行的方法中执行,就应该在适当的时候缓存finder的执行结果。只是要注意的是,如果这个引用只对当前的entity有效,你就需要在bean从缓冲池中取出来代表另外一个实体时清除掉这些引用。,这些操作应该在ejbactivate中进行。

法则5:总是使用prepare statements

这条优化法则适用于所有访问关系数据库的操作。

数据库在处理每一个sql statement的时候,执行前都要对statement进行编译。一些数据库具有缓存statement和statement的编译后形式的功能。数据库可以把新的statement和缓存中的进行匹配。然而,如果要使用这一优化特性,新的statement要必须和缓存中的statement完全匹配。

对于non-prepared statement,数据和statement本身作为一个字符串传递,这样由于前后调用的数据不同而不能匹配,就导致无法使用这种优化。而对于prepared statement,数据和statement是分开传递给数据库的,这样statement就可以和cache中已编译的statement进行匹配。statement就不必每次都进行编译操作。从而使用该优化属性。

【5】【6】【7】【8】【9】【10】【11】【12】【13】【14】【15】

这项技术在一些小型的数据库访问中能够减少statement将近90%的执行时间。

法则6:完全关闭所有的statement

在编写bmp的数据库访问代码时,记住一定要在数据库访问调用之后关闭statement,因为每个打开的statement对应于数据库中的一个打开的游标。

security

1.加密

对称加密

(1)分组密码

(2)流密码

常用的对称加密算法:

des和tripledes

blowfish

rc4

aes

非对称加密

常用的非对称加密算法

rsa

elgamal

会话密钥加密(对称加密和非对称加密一起使用)

常用的会话密钥加密协议

s/mime

pgp

ssl和tls ssl是在application level protocal和transport protocal之间的。

比如:http和tcp/ip之间

ssl 提供了服务器端认证和可选的客户端认证,保密性和数据完整性。

提供基于ssl方式的传输加密和认证,确保以下三种安全防护:

数据的机密性和准确性、

服务器端认证

客户端认证。

客户端认证比服务器端认证不很普遍的原因是每一个要被认证的客户都必须有一张verisign这样的ca签发的证书。

通常,在进行身份认证的时候,应当只接受一个ca,这个ca的名字包含在客户证书中。

由于不可能随意创建一个由指定ca签发的证书,所以这可以有效的防御通过伪造证书来进行的攻击尝试。

2.认证(authentication)

认证就是确定一条消息或一个用户的可靠性的过程。

1.消息摘要

md5

sha和sha-1

2.消息认证码(message authientication codes,mac)

3.数字签名

用户可以用自己的密钥对信息加以处理,由于密钥仅为本人所有,这样就产生了别人无法生成的文件,也就形成了数字签名

数字签名可以

1)保证数据的完整性

2)验证用户的身份

数字签名采用一个人的私钥计算出来,然后用公钥去检验。

hash算法 私钥加密

原报文 ――――――>;报文摘要( message digest ) ―――――>;数字签名

原报文和数字签名一起被发送到接受者那里,接受者用同样的hash算法得到报文摘要,然后用发送者的公钥解开数字签名。

比较是否相同,则可以确定报文确定来自发送者。

验证数字签名必须使用公钥,但是,除非你是通过安全的方式直接得到,否则不能保证公钥的正确性。(数字证书可以解决这个问题)

一个接受者在使用公钥(public key)检查数字签名(digital signature)的可信度时,通常先要检查收到的公钥(public key)是否可信的。

因此发送方不是单单地发送公钥(public key),而是发送一个包含公钥(public key)的数字证书(cetificate )。

4.数字证书

数字证书是一个经证书授权中心数字签名的包含公开密钥所有者信息以及公开密钥的文件。

数字证书cetificate中包括:

i. 用户的公钥(public key)

ii. 用户的一些信息,如姓名,email

iii. 发行机构的数字签名(digital signature), 用于保证证书的可信度

iv. 发行机构的一些信息

数字证书的格式遵循x.509国际标准。

注意:一个数字证书certificate并不适用于多种browser,甚至一种browser的多个版本。

数字标识由公用密钥、私人密钥和数字签名三部分组成。

当在邮件中添加数字签名时,您就把数字签名和公用密钥加入到邮件中。数字签名和公用密钥统称为证书。您可以使用 outlook express 来指定他人向您发送加密邮件时所需使用的证书。这个证书可以不同于您的签名证书。

收件人可以使用您的数字签名来验证您的身份,并可使用公用密钥给您发送加密邮件,这些邮件必须用您的私人密钥才能阅读。

要发送加密邮件,您的通讯簿必须包含收件人的数字标识。这样,您就可以使用他们的公用密钥来加密邮件了。当收件人收到加密邮件后,用他们的私人密钥来对邮件进行解密才能阅读。

在能够发送带有数字签名的邮件之前,您必须获得数字标识。如果您正在发送加密邮件,您的通讯簿中必须包含每位收件人的数字标识。

数字证书,可以是个人证书或 web 站点证书,用于将身份与"公开密钥"关联。只有证书的所有者才知道允许所有者"解密"或进行"数字签名"的相应"私人密钥"。当您将自己的证书发送给其他人时,实际上发给他们的是您的公开密钥,这样他们就可以向您发送只能由您使用私人密钥解密和读取的加密信息。

通过浏览器使用数字证书,必须先要设置浏览器软件 internet explorer 或 netscape使用此证书,才能开始发送加密或需要数字签名的信息。访问安全的 web 站点(以"https"打头的站点)时,该站点将自动向您发送他们的web站点证书。

3.ca(证书授证中心)

ca机构,又称为证书授证(certificate authority)中心,作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。ca中心为每个使用公开密钥的用户发放一个数字证书,数字证书的作用是证明证书中列出的用户合法拥有证书中列出的公开密钥。ca机构的数字签名使得攻击者不能伪造和篡改证书。在set交易中,ca不仅对持卡人、商户发放证书,还要对获款的银行、网关发放证书。它负责产生、分配并管理所有参与网上交易的个体所需的数字证书,因此是安全电子交易的核心环节。

〖5〗〖6〗〖7〗〖8〗〖9〗〖10〗〖11〗〖12〗〖13〗〖14〗〖15〗

对证书的信任基于对根证书的信任. 例如在申请sheca的个人数字证书前,需要先下载根证书,然后再进行各类证书的申请。

下载根证书的目的:

网络服务器验证(s);安全电子邮件(e)

申请个人数字证书可以为internet用户提供发送电子邮件的安全和访问需要安全连接(需要客户证书)的站点。

1)个人数字证书

a.个人身份证书

个人身份证书是用来表明和验证个人在网络上的身份的证书,它确保了网上交易和作业的安全性和可靠性。可应用于:网上炒股、网上理财、网上保险、网上缴费、网上购物、网上办公等等。个人身份证书可以存储在软盘或ic卡中。

b.个人安全电子邮件证书

个人安全电子邮件证书可以确保邮件的真实性和保密性。申请后一般是安装在用户的浏览器里。用户可以利用它来发送签名或加密的电子邮件。

用户在申请安装完安全安全电子邮件数字证书后,就可以对要发送的邮件进行数字签名。收信人收到该邮件后,就可以看到数字签名的标记,这样就可以证明邮件肯定来自发信者本人,而不是别人盗用该帐号伪造信件,同时也保证该邮件在传送过程中没被他人篡改过任何数据。

安全电子邮件中使用的数字证书可以实现:

保密性 通过使用收件人的数字证书对电子邮件加密。如此以来,只有收件人才能阅读加密的邮件,在internet上传递的电子邮件信息不会被人窃取,即使发错邮件,收件人也无法看到邮件内容。

认证身份 在internet上传递电子邮件的双方互相不能见面,所以必须有方法确定对方的身份。利用发件人数字证书在传送前对电子邮件进行数字签名即可确定发件人身份,而不是他人冒充的。

完整性 利用发件人数字证书在传送前对电子邮件进行数字签名不仅可确定发件人身份,而且传递的电子邮件信息也不能被人在传输过程中修改。

不可否认性 由于发件人的数字证书只有发件人唯一拥有,故发件人利用其数字证书在传送前对电子邮件进行数字签名,发件人就无法否认发过这个电子邮件。

outlook express中的个人安全电子邮件证书

签名邮件带有签名邮件图标。

签名邮件可能出现的任何问题都将在本信息之后可能出现的“安全警告”中得到描述。如果存在问题,您应该认为邮件已被篡改,或并非来自所谓的发件人。

当收到一封加密邮件时,您应该可以自信地认为邮件未被任何第三者读过。outlook express 会自动对电子邮件解密, 如果在您的计算机上装有正确的数字标识。

2)企业数字证书

a.企业身份证书

企业身份证书是用来表明和验证企业用户在网络上身份的证书,它确保了企业网上交易和作业的安全性和可靠性。可应用于:网上证券、网上办公、网上交税、网上采购、网上资金转帐、网上银行等。企业身份证书可以存储在软盘和ic卡中。

b.企业安全电子邮件证书

企业安全电子邮件证书可以确保邮件的真实性和保密性。申请后一般是安装在用户的浏览器里。企业可以利用它来发送签名或加密的电子邮件。

可使用 windows 中的证书服务来创建证书颁发机构 (ca),它负责接收证书申请、验证申请中的信息和申请者的身份、颁发证书、吊销证书以及发布证书吊销列表 (crl)。

通常,当用户发出证书申请时,在其计算机上的加密服务提供程序 (csp) 为用户生成公钥和私钥对。用户的公钥随同必要的识别信息发送至 ca。如果用户的识别信息符合批准申请的 ca 标准,那么 ca 将生成证书,该证书由客户应用程序检索并就地存储。

4.set

安全接口层协议——ssl(se cure socketslayer),并且已经几乎成为了目前www 世界的事实标准。这一标准使用公共密钥编码方案来对传输数据进行加密,在双方之间建立一个internet 上的加密通道,从而使第三方无法获得其中的信息,其思路与目前流行的方案大致相同,目的都是要保护数据不被未经授权的第三方所窃听,或即使窃听到也不知所云。但就象 一样,ssl 在认证方面没有任何作为,它们都需要通过另外的手段来确认身份和建立双方彼此间的信任,然后再通过ssl 进行交易。

正是由于ssl 标准在认证方面的缺憾,所以set 才有存在的必要。set(secure electronic transactions) 规范由masterc ard 和visa 公司于1996 年发布,专家们认为set 是保证用户与商家在电子商务与在线交易中免受欺骗的重要手段。传统的信用卡交易者总在担心不诚实的店员会将自己的信用卡号码透露给他人,而在线交易也是如此,持卡者总在担心服务器端的管理员会将信用卡号码泄露出去,或者担心黑客会在管理员不知情的情况下盗取信用卡号码。事实上这些担心都是必要的,而set 标准则可以保证用户的信用卡号码只传送给信用卡公司进行认证,不会被系统管理员看到,也不会留在交易服务器的硬盘上给黑客以可乘之机。

5.pki

pki是一种易于管理的、集中化的网络安全方案。它可支持多种形式的数字认证: 数据加密、数字签字、不可否认、身份鉴别、密钥管理以及交叉认证等。pki可通过一个基于认证的框架处理所有的数据加密和数字签字工作。p ki标准与协议的开发迄今已有20xx年的历史,目前的pki已完全可以向企业网络提供有效的安全保障。 〖5〗〖6〗〖7〗〖8〗〖9〗〖10〗〖11〗〖12〗〖13〗〖14〗〖15〗

pki是一种遵循标准的密钥管理平台,它能够为所有网络应用透明地提供采用加密和数字签名等密码服务所必需的密钥和证书管理。pki必须具有

1)ca、

2)证书库、

3)密钥备份及恢复系统、

4)证书作废处理系统、

5)客户端证书处理系统

等基本成分,构建pki也将围绕着这五大系统来构建

一个pki由众多部件组成,这些部件共同完成两个主要功能:

1)为数据加密

2)创建数字认证。

服务器(即后端)产品是这一系统的核心,这些数据库管理着数字认证、公共密钥及专用密钥( 分别用于数据的加密和解密)。

ca数据库负责发布、废除和修改x.509数字认证信息,它装有用户的公共密钥、证书有效期以及认证功能(例如对数据的加密或对数字签字的验证) 。为了防止对数据签字的篡改,ca在把每一数字签字发送给发出请求的客户机之前,需对每一个数字签字进行认证。一旦数字认证得以创建, 它将会被自动存储于x.500目录中,x.500目录为树形结构。ldap(lightweight directory access protocol)协议将响应那些要求提交所存储的公共密钥认证的请求。ca为每一用户或服务器生成两对独立的公共和专用密钥。其中一对用于信息的加密和解密, 另一对由客户机应用程序使用,用于文档或信息传输中数字签字的创建。

大多数pki均支持证书分布,这是一个把已发布过的或续延生命期的证书加以存储的过程。这一过程使用了一个公共查询机制,x.500目录可自动完成这一存储过程。影响企业普遍接受p ki的一大障碍是不同ca之间的交叉认证。假设有两家公司,每一家企业分别使用来自不同供应商的ca,现在它们希望相互托管一段时间。如果其后援数据库支持交叉认证, 则这两家企业显然可以互相托管它们的ca,因而它们所托管的所有用户均可由两家企业的ca所托管。

* 认证机关

ca是证书的签发机构,它是pki的核心。众所周知,构建密码服务系统的核心内容是如何实现密钥管理,公钥体制涉及到一对密钥,即私钥和公钥, 私钥只由持有者秘密掌握,无须在网上传送,而公钥是公开的,需要在网上传送,故公钥体制的密钥管理主要是公钥的管理问题,目前较好的解决方案是引进证书(certificate)机制。

证书是公开密钥体制的一种密钥管理媒介。它是一种权威性的电子文档,形同网络计算环境中的一种身份证,用于证明某一主体(如人、服务器等)的身份以及其公开密钥的合法性。在使用公钥体制的网络环境中, 必须向公钥的使用者证明公钥的真实合法性。因此,在公钥体制环境中,必须有一个可信的机构来对任何一个主体的公钥进行公证,证明主体的身份以及他与公钥的匹配关系。c a正是这样的机构,它的职责归纳起来有:

1、验证并标识证书申请者的身份;

2、确保ca用于签名证书的非对称密钥的质量;

3、确保整个签证过程的安全性,确保签名私钥的安全性;

4、证书材料信息(包括公钥证书序列号、ca标识等)的管理;

5、确定并检查证书的有效期限;

6、确保证书主体标识的唯一性,防止重名;

7、发布并维护作废证书表;

8、对整个证书签发过程做日志记录;

9、向申请人发通知。

其中最为重要的是ca自己的一对密钥的管理,它必须确保其高度的机密性,防止他方伪造证书。ca的公钥在网上公开,整个网络系统必须保证完整性。

* 证书库

证书库是证书的集中存放地,它与网上"白页”类似,是网上的一种公共信息库,用户可以从此处获得其他用户的证书和公钥。

构造证书库的最佳方法是采用支持ldap协议的目录系统,用户或相关的应用通过ldap来访问证书库。系统必须确保证书库的完整性,防止伪造、篡改证书。

* 密钥备份及恢复系统

* 证书作废处理系统

* pki应用接口系统

pki的价值在于使用户能够方便地使用加密、数字签名等安全服务,因此一个完整的pki必须提供良好的应用接口系统,使得各种各样的应用能够以安全、一致、可信的方式与p ki交互,确保所建立起来的网络环境的可信性,同时降低管理维护成本。最后,pki应用接口系统应该是跨平台的。

许多权威的认证方案供应商(例如verisign、thawte以及gte)目前都在提供外包的pki。外包pki最大的问题是,用户必须把企业托管给某一服务提供商, 即让出对网络安全的控制权。如果不愿这样做,则可建造一个专用的pki。专用方案通常需把来自entrust、baltimore technologies以及xcert的多种服务器产品与来自主流应用程序供应商(如microsoft、netscape以及qualcomm)的产品组合在一起。专用pk i还要求企业在准备其基础设施的过程中投入大量的财力与物力。

7.jaas

扩展jaas实现类实例级授权

“java 认证和授权服务”(java authentication and authorization service,jaas)

在 jaas 下,可以给予用户或服务特定的许可权来执行 java 类中的代码。在本文中,软件工程师 carlos fonseca 向您展示如何为企业扩展 jaas 框架。向 jaas 框架添加类实例级授权和特定关系使您能够构建更动态、更灵活并且伸缩性更好的企业应用程序。

大多数 java 应用程序都需要某种类实例级的访问控制。例如,基于 web 的、自我服务的拍卖应用程序的规范可能有下列要求: 《5》《6》《7》《8》《9》《10》《11》《12》《13》《14》《15》

任何已注册(经过认证)的用户都可以创建一个拍卖,但只有创建拍卖的用户才可以修改这个拍卖。

这意味着任何用户都可以执行被编写用来创建 auction 类实例的代码,但只有拥有该实例的用户可以执行用来修改它的代码。通常情况下,创建 auction 实例的用户就是所有者。这被称为类实例所有者关系(class instance owner relationship)。

该应用程序的另一个要求可能是:

任何用户都可以为拍卖创建一个投标,拍卖的所有者可以接受或拒绝任何投标。

再一次,任何用户都可以执行被编写用来创建 bid 类实例的代码,但只有拥有该实例的用户会被授予修改该实例的许可权。而且,auction 类实例的所有者必须能够修改相关的 bid 类实例中的接受标志。这意味着在 auction 实例和相应的 bid 实例之间有一种被称为特定关系(special relationship)的关系。

不幸的是,“java 认证和授权服务”(jaas)— 它是 java 2 平台的一部分 — 没有考虑到类实例级访问控制或者特定关系。在本文中,我们将扩展 jaas 框架使其同时包含这两者。推动这种扩展的动力是允许我们将访问控制分离到一个通用的框架,该框架使用基于所有权和特定关系的策略。然后管理员可以在应用程序的生命周期内更改这些策略。

在深入到扩展 jaas 框架之前,我们将重温一下 java 2 平台的访问控制机制。我们将讨论策略文件和许可权的使用,并讨论 securitymanager 和 accesscontroller 之间的关系。

java 2 平台中的访问控制

在 java 2 平台中,所有的代码,不管它是本地代码还是远程代码,都可以由策略来控制。策略(policy)由不同位置上的代码的一组许可权定义,或者由不同的签发者定义、或者由这两者定义。许可权允许对资源进行访问;它通过名称来定义,并且可能与某些操作关联在一起。

抽象类 java.security.policy 被用于表示应用程序的安全性策略。缺省的实现由 sun.security.provider.policyfile 提供,在 sun.security.provider.policyfile 中,策略被定义在一个文件中。清单 1 是一个典型策略文件示例:

清单 1. 一个典型的策略文件

// grant these permissions to code loaded from a sample.jar file

// in the c drive and if it is signed by xyz

grant codebase "file:/c:/sample.jar", signedby "xyz" {

// allow socket actions to any host using port 8080

permission .socketpermission "*:8080", "accept, connect,

listen, resolve";

// allows file access (read, write, execute, delete) in

// the users home directory.

permission java.io.filepermission "${user.home}/-", "read, write,

execute, delete";

};

securitymanager 对 accesscontroller

在标准 jdk 分发版中,控制代码源访问的机制缺省情况下是关闭的。在 java 2 平台以前,对代码源的访问都是由 securitymanager 类管理的。securitymanager 是由 java.security.manager 系统属性启动的,如下所示:

java -djava.security.manager

在 java 2 平台中,可以将一个应用程序设置为使用 java.lang.securitymanager 类或者 java.security.accesscontroller 类管理敏感的操作。accesscontroller 在 java 2 平台中是新出现的。为便于向后兼容,securitymanager 类仍然存在,但把自己的决定提交 accesscontroller 类裁决。securitymanager 和 accesscontroller 都使用应用程序的策略文件确定是否允许一个被请求的操作。清单 2 显示了 accesscontroller 如何处理 socketpermission 请求:

清单 2. 保护敏感操作

public void somemethod {

permission permission =

new .socketpermission("localhost:8080", "connect");

accesscontroller.checkpermission(permission);

// sensitive code starts here

socket s = new socket("localhost", 8080);

}

在这个示例中,我们看到 accesscontroller 检查应用程序的当前策略实现。如果策略文件中定义的任何许可权暗示了被请求的许可权,该方法将只简单地返回;否则抛出一个 accesscontrolexception 异常。在这个示例中,检查实际上是多余的,因为缺省套接字实现的构造函数也执行相同的检查。

在下一部分,我们将更仔细地看一下 accesscontroller 如何与 java.security.policy 实现共同合作安全地处理应用程序请求。

运行中的 accesscontroller

accesscontroller 类典型的 checkpermission(permission p) 方法调用可能会导致下面的一系列操作:

accesscontroller 调用 java.security.policy 类实现的 getpermissions(codesource codesource) 方法。

getpermissions(codesource codesource) 方法返回一个 permissioncollection 类实例,这个类实例代表一个相同类型许可权的集合。

accesscontroller 调用 permissioncollection 类的 implies(permission p) 方法。

接下来,permissioncollection 调用集合中包含的单个 permission 对象的 implies(permission p) 方法。如果集合中的当前许可权对象暗示指定的许可权,则这些方法返回 true,否则返回 false。

[1][2][3][4][5][6][7][8][9][10][11][12][13][14][15]

现在,让我们更详细地看一下这个访问控制序列中的重要元素。

permissioncollection 类

大多数许可权类类型都有一个相应的 permissioncollection 类。这样一个集合的实例可以通过调用 permission 子类实现定义的 newpermissioncollection 方法来创建。java.security.policy 类实现的 getpermissions 方法也可以返回 permissions 类实例 — permissioncollection 的一个子类。这个类代表由 permissioncollection 组织的不同类型许可权对象的一个集合。permissions 类的 implies(permission p) 方法可以调用单个 permissioncollection 类的 implies(permission p) 方法。

codesource 和 protectiondomain 类

许可权组合与 codesource(被用于验证签码(signed code)的代码位置和证书)被封装在 protectiondomain 类中。有相同许可权和相同 codesource 的类实例被放在相同的域中。带有相同许可权,但不同 codesource 的类被放在不同的域中。一个类只可属于一个 protectiondomain。要为对象获取 protectiondomain,请使用 java.lang.class 类中定义的 getprotectiondomain 方法。

许可权

赋予 codesource 许可权并不一定意味着允许所暗示的操作。要使操作成功完成,调用栈中的每个类必须有必需的许可权。换句话说,如果您将 java.io.filepermission 赋给类 b,而类 b 是由类 a 来调用,那么类 a 必须也有相同的许可权或者暗示 java.io.filepermission 的许可权。

在另一方面,调用类可能需要临时许可权来完成另一个拥有那些许可权的类中的操作。例如,当从另一个位置加载的类访问本地文件系统时,我们可能不信任它。但是,本地加载的类被授予对某个目录的读许可权。这些类可以实现 privilegedaction 接口来给予调用类许可权以便完成指定的操作。调用栈的检查在遇到 privilegedaction 实例时停止,有效地将执行指定操作所必需的许可权授予所有的后继类调用。

使用 jaas

顾名思义,jaas 由两个主要组件组成:认证和授权。我们主要关注扩展 jaas 的授权组件,但开始我们先简要概述一下 jaas 认证,紧接着看一下一个简单的 jaas 授权操作。

jaas 中的用户认证

jaas 通过添加基于 subject 的策略加强了 java 2 中定义的访问控制安全性模型。许可权的授予不仅基于 codesource,还基于执行代码的用户。显然,要使这个模型生效,每个用户都必须经过认证。

jaas 的认证机制建立在一组可插登录模块的基础上。jaas 分发版包含几个 loginmodule 实现。loginmodules 可以用于提示用户输入用户标识和密码。logincontext 类使用一个配置文件来确定使用哪个 loginmodule 对用户进行认证。这个配置可以通过系统属性 java.security.auth.login.config 指定。一个示例配置是:

java -djava.security.auth.login.config=login.conf

下面是一个登录配置文件的样子:

example {

com.ibm.resource.security.auth.loginmoduleexample required

debug=true userfile="users.xml" groupfile="groups.xml";

};

认识您的主体

subject 类被用于封装一个被认证实体(比如用户)的凭证。一个 subject 可能拥有一个被称为主体(principal)的身份分组。例如,如果 subject 是一个用户,用户的名字和相关的社会保险号可能是 subject 的某些身份或主体。主体是与身份名关联在一起的。

principal 实现类及其名称都是在 jaas 策略文件中指定的。缺省的 jaas 实现使用的策略文件与 java 2 实现的策略文件相似 — 除了每个授权语句必须与至少一个主体关联在一起。javax.security.auth.policy 抽象类被用于表示 jaas 安全性策略。它的缺省实现由 com.sun.security.auth.policyfile 提供,在 com.sun.security.auth.policyfile 中策略定义在一个文件中。清单 3 是 jaas 策略文件的一个示例:

清单 3. 示例 jaas 策略文件

// example grant entry

grant codebase "file:/c:/sample.jar", signedby "xyz",

principal com.ibm.resource.security.auth.principalexample "admin" {

// allow socket actions to any host using port 8080

permission .socketpermission

"*:8080", "accept, connect, listen, resolve";

// allows file access (read, write, execute, delete) in

// the users home directory.

permission java.io.filepermission

"${user.home}/-", "read, write, execute, delete";

};

这个示例与清单 1 中所示的标准 java 2 策略文件相似。实际上,唯一的不同是主体语句,该语句声明只有拥有指定主体和主体名字的 subject(用户)被授予指定的许可权。

再一次,使用系统属性 java.security.auth.policy 指出 jaas 策略文件驻留在何处,如下所示:

java -djava.security.auth.policy=policy.jaas

subject 类包含几个方法来作为特殊 subject 执行工作;这些方法如下所示:

public static object

doas(subject subject, java.security.privilegedaction action) 3 4 5 6 7 8 9 10 11 12 13 14 15

public static object

doas(subject subject, java.security.privilegedaction action)

throws java.security.privilegedactionexception

jaas 中的授权

清单 4 显示一个授权请求的结果,该请求使用清单 3 中显示的 jaas 策略文件。假设已经安装了 securitymanager,并且 logincontext 已经认证了一个带有名为“admin”的 com.ibm.resource.security.auth.principalexample 主体的 subject。

清单 4. 一个简单的授权请求

public class jaasexample {

public static void main(string args) {

...

// where authenticateduser is a subject with

// a principalexample named admin.

subject.doas(authenticateduser, new jaasexampleaction);

...

}

}

public class jaasexampleaction implements privilegedaction {

public object run {

filewriter fw = new filewriter("hi.txt");

fw.write("hello, world!");

fw.close;

}

}

这里,敏感代码被封装在 jaasexampleaction 类中。还要注意,调用类不要求为 jaasexampleaction 类代码源授予许可权,因为它实现了一个 privilegedaction。

扩展 jaas

大多数应用程序都有定制逻辑,它授权用户不仅仅在类上执行操作,而且还在该类的实例上执行操作。这种授权通常建立在用户和实例之间的关系上。这是 jaas 的一个小缺点。然而,幸运的是,这样设计 jaas 使得 jaas 可以扩展。只要做一点工作,我们将可以扩展 jaas,使其包含一个通用的、类实例级的授权框架。

在文章开头处我已经说明了,抽象类 javax.security.auth.policy 被用于代表 jaas 安全性策略。它的缺省实现是由 com.sun.security.auth.policyfile 类提供。policyfile 类从 jaas 格式的文件(象清单 3 中显示的那个一样)中读取策略。

我们需要向这个文件添加一个东西为类实例级授权扩展策略定义:一个与许可权语句相关的可选关系参数。

缺省 jaas 许可权语句的格式如下:

permission ; [name], [actions];

我们在这个许可权语句的末尾添加一个可选的关系参数来完成策略定义。下面是新许可权语句的格式:

permission ;

[name], [actions], [relationship];

在为类实例级授权扩展 jaas 时要注意的最重要的一点是:许可权实现类必须有一个带三个参数的构造函数。第一个参数是名称参数,第二个是行为参数,最后一个是关系参数。

解析新文件格式

既然文件格式已经改变,就需要一个新的 javax.security.auth.policy 子类来解析文件。

为简单起见,我们的示例使用了一个新的 javax.security.auth.policy 子类 com.ibm.resource.security.auth.xmlpolicyfile,来从 xml 文件读取策略。在实际的企业应用程序中,关系数据库更适合执行这个任务。

使用 xmlpolicyfile 类代替缺省的 jaas 访问控制策略实现的最容易的方法是向 java.security 属性文件添加 auth.policy.provider=com.ibm.resource.security.auth.xmlpolicyfile 条目。java.security 属性文件位于 java 2 平台运行时的 lib/security 目录下。清单 5 是与 xmlpolicyfile 类一起使用的样本 xml 策略文件:

清单 5. 一个 xml 策略文件

;

;

;

"com.ibm.resource.security.auth.principalexample" name="users">;

"com.ibm.resource.security.auth.resourcepermission"

name="com.ibm.security.sample.auction"

actions="create" />;

"com.ibm.resource.security.auth.resourcepermission"

name="com.ibm.security.sample.auction"

actions="read" />;

"com.ibm.resource.security.auth.resourcepermission"

name="com.ibm.security.sample.auction"

actions="write"

relationship="owner" />;

"com.ibm.resource.security.auth.resourcepermission"

name="com.ibm.security.sample.bid"

actions="create" />;

"com.ibm.resource.security.auth.resourcepermission"

name="com.ibm.security.sample.bid"

actions="read" />;

"com.ibm.resource.security.auth.resourcepermission"

【5】【6】【7】【8】【9】【10】【11】【12】【13】【14】【15】

name="com.ibm.security.sample.bid"

actions="write"

relationship="owner" />;

"com.ibm.resource.security.auth.resourcepermission"

name="com.ibm.security.sample.bid"

actions="accept"

relationship="actionowner" />;

;

;

;

在这个示例策略文件中,任何与名为 principalexample 的用户有关的用户(subject)都可以创建并读取一个 auction.class 实例。但是,只有创建该实例的用户才可以更新(写)它。这是第三个 permission 元素定义的,该元素包含值为 owner 的 relationship 属性。bid.class 实例也是一样,除了相应 auction.class 实例的所有者可以更改投标接受标志。

resource 接口

要求类实例级访问控制的类必须实现 resource 接口。该接口的 getowner 方法返回类实例的所有者。fulfills(subject subject, string relationship) 方法被用于处理特定关系。另外,这些类使用 com.ibm.resource.security.auth.resourcepermission 类保护敏感代码。例如,auction 类拥有下列构造函数:

public auction {

permission permission =

new resourcepermission("com.ibm.security.sample.auction", "create");

accesscontroller.checkpermission(permission);

}

所有者关系

resourcepermission 类的 implies(permission p) 方法是这个框架的关键。implies 方法就等同性比较名称和行为属性。如果定义了一个关系,那么必须把受保护的类实例(resource)传递到 resourcepermission 构造函数中。resourcepermission 类理解所有者关系。它将类实例的所有者与执行代码的 subject(用户)进行比较。特定关系被委托给受保护类的 fulfills 方法。

例如,在清单 5 中所示的 xml 策略文件中,只有 auction 类实例的所有者可以更新(写)文件。该类的 setter 方法使用清单 6 中显示的保护代码:

清单 6. 运行中的 implies(permission) 方法

public void setname(string newname) {

permission permission =

new resourcepermission("com.ibm.security.sample.auction", "write", this);

accesscontroller.checkpermission

展开阅读全文

篇12:java开发实习周记

范文类型:周记,全文共 765 字

+ 加入清单

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。 数据库设计:a) 降低关联的复杂性、b) 尽量不使用联合主键、c) ID的生成机制,不同的数据库所提供的机制并不完全一样、d) 适当的冗余数据,不过分追求高范式

2、 HQL优化:HQL如果抛开它同HIBERNATE本身一些缓存机制的关联,HQL的优化技巧同普通的SQL优化技巧一样,可以很容易在网上找到一些经验之谈。

加载策略:延迟加载vs立即加载、-延迟加载(默认) 不会立即命中数据库,使用数据时命中、在可以改变为立即、*使用数据必须在session关闭之前、-立即加载:立即命中数据库,不管有没有数据

抓取策略、查询抓取:(N+1)、连接抓取:需要在关联的对象中设臵fetch="select|join"、N+1 与 1+M:-针对一端,如果查询有m个对象,这时会先发送1条sql语句查出m个对象,然后再发送m条sql语句查关联对象,这就是1+M、-针对多端,如果查询有n个对象,那么对每个对象需要重新发送一条sql语句,这就是n+1。

事务控制:事务方面对性能有影响的主要包括:事务方式的选用,事务隔离级别以及锁的选用a) 事务方式选用:如果不涉及多个事务管理器事务的话,不需要使用JTA,只有JDBC的事务控制就可以。b) 事务隔离级别:参见标准的SQL事务隔离级别c) 锁的选用:共享锁、独占锁、更新锁、死锁、悲观锁、乐观锁。

展开阅读全文

篇13:java试用期总结

范文类型:工作总结,全文共 1020 字

+ 加入清单

我于20__年_月_日成为公司的试用员工,至今已有2个月,根据公司规章制度,现申请转为公司正式员工。在此我感谢领导对我的栽培和指导;同时也感谢同事对我工作的支持和帮助。试用期间,在领导和同事的耐心指导下,使我在较短的时间内适应了公司的工作环璄,也熟悉了公司的整个操作流程。

在本部门的工作中,我一直严格要求自己,认真及时做好领导布置的每一项任务;利用自己在别的公司好的工作经验及管理方法应用到工作中,培训IPQC及QA能及时反映问题及处理问题的能力。经过两个月的工作,我现也能够独立处理本职工作,能对车间问题进行简单分析处理,与生产、工程沟通协调相关品质问题的处理方法,纠正产线相关作业不当造成的品质问题,把制程中存在的问题降低到最小。

我在工作过程中充分做到认真,负责,主动的了解生产现场情况。和组长及产线员工的沟通,使我了解了她们内心的真实想法和对工作和认识及看法;经过一段时间的观察让我清楚了车间生产管理的不足。通过全面的了解,我认为员工整体品质意识不强,主要原因我认为在于细节不够完善。集中体现在以下几个方面:

1.产线制程维修较多。同一个问题连续不断的发生,原因为产线员工品质意识不够,对品质部依赖太强,不能对不良品完全检查出来,导致不良品连续不断的流到QA检查。

2.检验标准不够完善,导致员工及QA检查对发现不良无法做出具体判定。

在领导和同事们的细心关怀和指导下,通过自身的努力,各方面均取得了一定的进步,现将我的工作情况作如下汇报。

工作规划:

1.及时有效处理客户反馈信息,反馈至相关人员进行根源上的改善,杜绝不良的重复发生和流出,以减少客诉,提升的满意度。

2.提高IPQC及QA的检验水平,提高全员的品质意识,有针对性的对员工进行品质意识教导。让IPQC明确每天的工作重点,计划,努力的方向。

3.定时对QA各工位进行巡视,每天对产品质量定时跟踪、分析生产过程中不良率超过2%的原因,提出改善建议,并监督核实部门改善及提出改善建议;

4.与生产、工程一起分析影响质量的关键因素,制定相关的改进措施。

从进入本公司以来,看到公司迅速发展,我深深地感到骄傲和自豪,也更加迫切的希望以一名正式员工的身份在这里工作,实现自己的奋斗目标,体现自己的人生价值。在此我提出转正申请,恳请领导给我继续锻炼自己实现理想的机会,我将更加勤奋的工作,刻苦的学习,努力提高文化素质和各种工作技能,为公司创造价值,同公司一起发展与进步!

杨建龙

20__年__月__日

展开阅读全文

篇14:高级Java开发工程师的职责职能模板

范文类型:制度与职责,适用行业岗位:工程师,工程,全文共 524 字

+ 加入清单

职责:

1、负责公司软件的开发工作(包括设计、编码、测试,文档);

2、根据需求进行模块级别的设计,并书写文档;

3、根据设计文档编写代码,能独立负责目标任务的开发过程;

4、对自已或他人开发的部分进行单元测试;

5、积极参与内部技术交流,具备编写文档的能力与功底;

6、根据系统设计进行实际代码编写和测试工作;

7、按项目管理规范要求编写相关文档,准确描述和解析业务需求、解决方案。

任职资格:

1、计算机或相关专业毕业,本科及以上学历;具有3年以上的相关开发经验;

2、熟悉掌握java、JavaScript、JSP等编程,而且有良好的编码习惯;

3、有面向对象的分析与设计能力及开发经验,熟悉使用Spring、Hibernate等开源框架模式;

4、熟悉Oracle、DB2等大型数据库及Liunx的应用;

5、熟悉使用Weblogic、Tomcat、WebSphere等应用服务;

6、具有良好的文字表达能力及良好的编码习惯;

7、性格开朗,快速的学习能力,思路清晰,能独立分析和解决问题;

8、有团队合作精神与沟通表达能力,积极主动,有责任性;

9、愿意与公司一同成长与发展,能承受一定的工作压力;

10、有团队带队管理能力者,或有大型软件开发经验,尤其是银行业经验者优先。

展开阅读全文

篇15:计算机java实习总结

范文类型:工作总结,全文共 654 字

+ 加入清单

通过这一期的实训,虽然实训的时间不长,但是总体上收获挺大的,学习中我不但有了学习成果的喜悦,而且自己也日渐成熟,有种说不出的喜悦。

当我们正式准备学习实训java编程技术时,让我倍感兴奋,毕竟java是自己以后想主攻技术,所以自然也就非 常的亢奋。刚开始实训的第一天,同学们就推荐我为组长,我感觉肩上责任之重大,那一刻起,我就决心带领我们小组,奋战我们的实训路。当然开始学习后也并非是想象中那样顺利,开始的学习让我异常感到学习任务的艰巨,因为学习中我们遇到了很多以前未曾遇到的难点,有时难免冥思苦想也无济于事,通过我们小组的积极努力协作,同时请教老师和其他同学,我们顺利的化解了一道道的障碍。

这让我不断的对学习技术又有了新的认识:学习中我们必须边总结边学习,开始阶段对老师交代的任何方法和类都不要放过,不管是否简单与否都要乐于地接受,因为老师肯定有他的道理,相信老师走过的路比我们长,那么其经验也就肯定比我们丰富。上课时一定要专心听讲,一个关键的知识点听漏了,可能会使一个人在课下花很多时间去消化,这样也就会花掉做其他事情的大量时间,同时也使得学习不能和老师的讲的课程同步,以至出现以后就跟不上老师讲课的进度而掉队。所以学习中我们宁可先劳其筋骨,苦其心志,恶其体肤,也不能掉队跟不上学习进度。

在这里,我非常感谢实训的指导老师,在老师的帮助和指导下,我克服了Java学习上的一道道难关,课上认真听讲,摘好必要的笔记,并通过自己课后的不断消化学习,现在自己已经基本掌握了java的基础知识,并且能独立的开发出系统。

展开阅读全文

篇16:java面试自我介绍范文

范文类型:自我评介,全文共 340 字

+ 加入清单

良好的编程风格;熟悉JSP+Servlet+javaBean模式的WEB开发;熟悉Struts,Hibernate,Spring等开源框架,了解EJB; 熟悉Tomcat,Jboss服务器等,熟悉基于Linux及Unix环境下的软件开发。

在校期间有多次社会实践经历,曾参与过学院网上虚拟实验室开发的需求分析,大学期间多次担任多课程的课代表。虽然实际工作经验不是很足,但军校四年培养了我充分的自信心和敬业精神以及扎实的学科基础知识和较强的专业技能,四年军校生活中,我严格要求自己,自觉、遵纪、守时。本人坦诚且有责任心,有独立进取的品性,勤于动手、善于动脑,适应新环境能力很强。能在最短时间内完成从学生到职业工作人员的转型,尽自己最大的努力融入新的工作生活。

请各位考官多多指教,谢谢!

展开阅读全文

篇17:计算机java实习小结

范文类型:工作总结,全文共 469 字

+ 加入清单

实训即将结束了,我非常怀念厦门万策在南昌大学的校内实训,在实训的这短短两周的时间里,我每一天过的都市踏实的,充实的;我相信,只要我秉持艰苦奋斗,为理想拼搏的精神,尽管在未来的java路上荆棘丛丛,我一定可以披荆斩刺,度过重重难关,实现自己未来的理想!

实习是为将来打基础的重要阶段,珍惜自己每一个工作的机会,不论什么人,什么学历,从事什么工作,好好的表现、展示自己的能力,不要错过好的机遇。没有一件事情是轻轻松松的,但每一件事都是让人成长的,经历一段过程,喜悦或是艰辛,尽管经历的方式不尽相同,但它的结果是相同的,我们都会因涉事而成长。

通过实习,我自身发生了重大的转变。首先,进入公司,你就是一名职业人,不再是一名学生,你要具备一名职业人应具备的素养,不迟到不早退是必然的,而且还要时刻严格要求自己,公司的规定要严格遵守。然后,在技术上也有了很大的提高,学习了很多公司自己的框架和工具,这都是一些前辈的宝贵经验。而且所作的软件应用性更强。所以,我要坚定自己的信念,在公司好好实习,争取提早转正,我相信我会在JAVA开发这条路上走的更长更远。

展开阅读全文

篇18:java开发实习周记

范文类型:周记,全文共 414 字

+ 加入清单

实习第一个礼拜,算是适应期。主要了解一些公司的背景、产品、发展方向等。刚到实习公司,不是像学校里的朝九晚五,而是朝八晚九。我们不可能简单的了解一些企业文化,简单的学学新的知识就可以了,我们的这个实习必将是一个繁忙的实习,也必将是一个充实的,进步的实习。来到这里,我们要忘掉大学里自由的作息时间,克服困难,养成良好的工作生活习惯。基于各方面的原因,虽然在去之前我们做了比较充足的准备,但还是遇到了一些困难,例如学习时间长,实战比较繁多,但时间又比较的短,难以保证按时按质按量完成。下午下了班,员工们都回去了,我还在那儿练习,一直到晚上9点,才能回住处休息。中午也没有休息的地方,只能趴在电脑前休息一会,一两周下来,相当地疲惫。但我们都明白自己来实习的任务,都坚持着完成自己的任务和使命。这个星期熟悉了工作环境、java编程的环境配臵。等慢慢熟悉起来,做起事情也越来越顺手了。简单的总结为几个字,那就是:多看,多问,多观察,多思考!

展开阅读全文

篇19:java开发实习周记

范文类型:周记,全文共 485 字

+ 加入清单

功能需求如下:

这是一个网上在线购物系统(B2C)。

系统需要提供网上购物的功能。

用户能够随意浏览商品,并能获取商品的详细信息,如图片预览、商品描述等。 系统能够向用户提供一些浏览信息,让用户能够快速的了解系统出售商品信息,如特价促销,店长推荐,排行榜,新上架商品等。

系统能够提供3级分类商品。

系统能够提供品牌分类。 系统能够提供公告信息,让用户快速了解系统的通告信息。

系统能够提供论坛的方式,供用户发表对商品的评论的功能。

系统能够提供搜索功能,让用户快速了解他需要的产品。

用户在浏览3级分类商品的时候,需要体统高级筛选功能,如不同方式浏览商品信息、按价格排序商品,按规格浏览商品等功能。

用户购物需要注册成为本系统的会员,并能随时修改自己的信息(如收货信息等)。

会员能够收藏自己喜欢的商品,并能随时关注该商品。

会员能够查看已购买的商品。

会员能够完成与论坛的相关功能。

总结:通过实战,发现自己学得不是自己想象的那么好,有些功能还是做不出来。通过新豆商城项目,发现自己的不足,跟同事之间的交流中,能学到很多新知识。简单的总结为几个字,那就是:多看,多问,多观察,多思考!

展开阅读全文

篇20:java求职信范文

范文类型:求职应聘,全文共 582 字

+ 加入清单

尊敬的领导:

您好!得知贵公司的招聘信息,我对Flash程序员一职很感兴趣。从大学毕业至今,一直在深圳一家网络公司担任Flash编程职务。对Flash游戏课件编程有了相当的了解和熟悉,我相信我有能力担当贵公司所要求的Flash编程任务。

我对计算机编程有着非常浓厚的兴趣,熟练运用Flash动画及Action Script2.0编程,熟悉Flash游戏开发流程;熟悉Photoshop、Dreamweaver MX 20xx及Visual Studio 20xx等网页制作工具,熟悉HTML,有一定的.NET+Sjava 程序员求职信L网站建设能力。

面对当今激烈的人才竞争,我很清楚自己知识有限,但我更清楚我有着不甘落后的精神和不断学习,不断提高的愿望。乐于进取,不怕挫折是我的人生信条,给我一次机会,让我去实践,去闯,去干,因为能力要在实践中培养,也终究要在实践中体现。我信心十足,相信我所具备的专业技能,积累的知识,加上有良好的人际关系,会帮助我掀开生活中的新一页。

假如我有幸能成为贵公司的一员,我相信我有能力胜任贵公司安排的工作,并愿与公司同甘共苦,并将以敬业乐业,深入实际,吃苦耐劳,开拓创新的精神投入到工作当中去。我相信贵公司能给我提供施展才能的另一片天空,而且我也相信我的努力能让贵公司的事业更上一层楼。感谢您对我的关注!

此致

敬礼

求职人:

20xx年x月x日

展开阅读全文