出国旅游、留学省钱绝招.doc_第1页
出国旅游、留学省钱绝招.doc_第2页
出国旅游、留学省钱绝招.doc_第3页
出国旅游、留学省钱绝招.doc_第4页
出国旅游、留学省钱绝招.doc_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

出国旅游,留学省钱绝招!出国留学的朋友越来越多,都知道,出国留学费用一般要几十万,这是一笔非常大的开支。因此大家都想知道有什么招数,能让出国留学花钱减少?我整理了一下我的经验,大家看看吧。 1. 奖学金。在办理出国留学时,千万不要忘记了解奖学金的申请条件。各个国家都有政府或是社会团体提供的大额奖学金;每个学校也会有针对优秀学生和特长学生的奖学金。如果你成绩优异,或是有某些出类拔萃的特长,不妨冲击一下大额奖学金,例如全奖、半奖和助研助教机会。我的一个师兄就成功利用他的特长捞了个半奖,省了不少银子呢。 2.票汇。出国带汇和中途汇款有不少省钱的“门道”。在换完外汇后,很多人都习惯选择电汇,而忽略了其他汇款方式。其实,如果是首次出境,在国外尚未开立银行账户,而要去留学的城市正好有国内银行的网点,那么票汇其实是不错的选择,它一来携带方便,二来可以节省费用。比如,我去英国伦敦留学,学费10000英镑,在换完汇后,选择电汇将支付手续费人民币280余元,而票汇的手续费不到电汇的一半。如果学校接受信用卡付费,连汇款手续费都省了。3.机票。想省钱,机票是一个重要途径。首先牢记,机票千万别去航空公司和旅游网直接买,价格贵不说,信息还不真实,一个男同学照着他们提供的最低价去订票,对方告诉他那个价格没座了,最后他只好还是花全价买了一张有座的,我倒。最好到留学机票专卖去购买,他们价格便宜不说,关键是服务好,能提供给我们N多出行经验,什么转机啦、改签啦、特惠行李啦,我订的票还不错,买票前最好电话咨询一下,他家会根据你的时间和价格出一个建议,帮你找到最优惠的价格和条件,我上次飞英国价格是全国最低的,比航空公司便宜几千;单张票也能便宜几百至上千,还免费多带了一件15KG的行李,多带一件行李可以省钱不少哦。 4. 学费早交。学费早交,而且一次性交清能得到非常高的discount。不过这个因校而异。我听说有20%-5%不等的打折,也就是学费1W个胖子。自己可以拿回来最多2000英镑呢,开心死了,差不多一年生活费就出来了。不过也有学校只是随便退还几百英镑,逗你开心而已。总之,不能一概而论的东西。5. 学校同乡。同一个学校的老乡同学,一定要认识,一定要多亲近,从他们那里你不仅可得到无私的帮助,还可以继承很多有用的物品。我就从一个老乡那儿收获了好多生活必需品,呵呵。还有这年代信息最重要,多跟他们聊聊天,听听当地的信息,比这里爬着看帖子要划算得多。 6. 网购。网络购物还是相对很安全,也很便捷的。对于电子类产品,可以在网上多查查,多找找,能淘到便宜实惠的东西。多逛逛论坛,就知道什么的东西,价格比较实惠。 7.买东西。如果正在看这个帖子的你是男生,那就不用操心了,注意发现一下身边的女生,绝大多数的她们都知道那里去买衣服,哪里有打折,平日里面跟他们保持良好关系,到了跟前她们都很乐意帮助你的。如果你是女生,逛街经验都丰富,能找到合适的购物场所。 8. 学生卡。 这个是一个好东西,差不多都能打69折。在大部分国家,去一个景点什么的,学生票几乎是最便宜的票价。所以,要记得住天天把学生证呆在身上,而且要坚定地问:我是学生,有没有打折? 真的不掉线吗?、?9. 玩 交通工具无非那几种,自己有车的人不属于这里的省钱户,踢出去。火车和长途公车哪一种适合旅游呢?从省钱的角度上讲,长途车便宜。如果只是城市里面坐坐公交车什么的,那么请仔细问问。一般大一点的城市都有月票什么的,方便携带,也非常便宜。自己留心,多问问留学的前辈高人。10.书籍。不要买什么所谓的新课本,非常之贵。而且看得机会也不大。如果有买这里新书的闲钱,还不如在网上支持一下国内盗版事业。这些书一般都能在国内找到影印版,掏点小钱就能随便看到。而且图书馆一般都有,但供不应求。一般确实需要的话借了就一直办延期,超过延期次数后直接留下,看完再还,一般超期还书的罚款金额都不大。 11. 吃饭。想省钱,还是自己做饭来的省钱。不过我不建议从嘴里省钱,毕竟身体最重要,有好的身体和精力,还有好的精神状态,才有可能专心学习。留学生中得胃病的人很多,大都是因为懒,少一点打游戏的时间,就有时间做饭了,而且会有很多MM或者GG冲过来,就是因为你会做饭。哈哈,朋友多了,光吃百家饭就能活很久。不过回到正题,买食物和食材,可以周边的超级市场,价格较为实惠,尤其是肉的质量好。大家只要留心,会发现有一些仓储式的超市。东西在那里更加便宜,但是一个人用不完,建议跟朋友几个人一起买,然后分赃就行了。 12.租房子 住学校一般都是距离学校近,价格偏高但是不用自己操心,还有清洁工固定时间来打扫。我是建议第一年的学生都住在学校里面。但是真正要省钱呢,还是住在外面。我建议从上课地方出来,沿着某一个方向行走30分钟,在地图上以出发地为圆心,步行30分钟的那个地点为半径,画一个住宅区圆,这个区域都可以考虑,自然,经过大量比较,你会发现距离学校越远的地方越便宜,近的地方一般都是让留学生把房价炒高了。偶尔会发现便宜且很近的地方,这就是运气了。要注意,在住房上想省钱,要么凭运气,要么就要努力去看去找,偷懒还想省钱,那就是在做梦了。 真的不掉线吗?、?2009年小学六年级毕业水平检测科学命题思想及复习建议根据素质教育的总体要求,结合是教育部门关于“把好教育质量观”的具体目标,下面谈谈小学科学毕业考试说明。一、命题的指导思想 以培养学生科学素养为目的,以“注重过程、促进发展”为原则,以新课标为依据,以教材为载体,以探究为重点,贴切实际,贴近生活,将知识与技能,过程与方法有机地融为一体,考察六年级学生科学学习水平,了解六年级学生的科学能力层次,分析小学科学教学现状,研究小学科学教学改革及新课程改革的问题,从而指导和促进小学其他年级的科学教学,进一步加强小学科学质量管理,提高小学科学教学质量,为学生可持续发展打下良好的基础。二、命题依据本次小学科学毕业考试以现行教材为依托,以检测小学阶段学业水平和能力为目标,并努力体现科学课程标准的基本理念和要求。三、命题原则1、基础性原则:以现行大象版教材为依据,但不拘泥于教材,以考查学生的基础知识、基本能力和学习方法为主,力求起到有利于教学改革的导向作用。真的不掉线吗?、?2、学科性原则:命题将以考查学生的科学素养为宗旨,注重考查学生的综合探究能力和运用知识、技能解决问题的能力。3、实践与生活统一性原则:命题将力求实践联系生活实际,富有儿童趣味,符合学生认识水平和能力,使学生能清晰地认识到“让自然走进科学,让科学融入生活”这个理念,认识到在日常生活中要留心科学,善于观察,善于思考,善于实践,善于探究。4、渗透过程性:命题本着“注重过程、促进发展”的原则,在命题时我们将增加过程意识,强调学习者的经验和体验。 总之,在命题中,我们尽量做到让学生掌握科学概念,学会科学方法,培养科学态度,懂得如何面对现实生活中与科学有关的问题,注重科学精神与人文精神的结合,现代科技与日常生活的结合,科学内容与科学过程的结合,以及知识教育与能力培养的结合。四、考试的内容、范围 以教育部制定的科学课程标准提出的小学科学课程目标及现行教材大象版六年级上、下册为依据,上册占10%-20%,下册占80%-90%。五、考试形势及试卷结构、题型、难度等 1、试卷题型:填空、判断、选择、问答、试验题2、答卷方式:闭卷、笔试3、试卷分值及考试时间:和思品合卷,试卷满分100分,各占50分,考试时间:40分钟。六、试题难度整卷难度控制在0.8-0.85之间。 真的不掉线吗?、?2011年考研报名工作正在火热进行中,对于考研族来说,“知识改变命运”的口号变成了“考研改变命运”,于是考研就成了第二次高考,考生在专业选择时也是慎之又慎。为了帮助考生更好地确定就业目标,记者收集并整理了目前高薪就业的五大热门专业,并邀请相关专家进行解读。法律硕士法律硕士专业学位(JM)是从美国、英国等西方国家的培养方式引进而来,主要为立法、司法、行政执法、法律服务以及社会政治、公共管理、经济管理等部门培养德才兼备的适用社会主义市场和社会主义法制建设需要的高层次复合型、应用型高级法律人才。自2009年起法律硕士分为法学法硕和非法学法硕,非法学硕士大家仍可理解为2000年定义的法律硕士,而法学法硕则只招法律专业毕业生。热门院校:北京大学、中国人民大学、中国政法大学、对外经贸大学、吉林大学。就业前景:比较多的毕业生是选择公务员(包括法院、检察院、参照公务员执行的单位)、金融机构(包括银行、证券公司、信托公司、资产管理公司、基金公司等)、律师事务所、会计师事务所、公司法务、高校、继续深造。金融学专业金融学现在是个很热门的学科,金融学专业主要研究现代金融机构、金融市场以及整个金融经济的运动法律。主要研究方向有货币银行学、金融经济(含国际金融、金融理论)、投资学、保险学、公司理财(公司金融)。目前,金融学已取消先前的联考形式。各大学校都是采用自主命题、自主阅卷的方式组织考试。这些学校的考试科目、考试范围和参考书目等可通过各学校的研究生处(部)查看2011年硕士研究生招生简章。热门院校:原中国人民银行所属财经大学金融学专业、西南财经大学、西安交通大学、真的不掉线吗?、?湖南大学、中国人民银行研究生部。就业前景:金融人才短缺,就业前景广阔,是实实在在的高薪就业专业。计算机专业计算机科学与技术学科可分为理论计算机科学、计算机软件、计算机系统结构。计算机应用技术等领域以及与其他学科交叉的研究领域,如人工智能、应用数学等。2009年起计算机实行统考。计算机应用技术专业是一应用十分广泛的专业,它以计算机基本理论为基础,突出计算机和网络的实际应用。热门院校:清华大学、北京大学、北京航空航天大学、西安交通大学、哈尔滨工业大学。就业前景:人才结构呈两头小中间大的橄榄型结构,即软件高端人才,包括系统分析师、项目技术主管等,和低端人才,如软件编码程序员等从事基础性软件开发的人员都严重短缺,而中级(端)人才过剩。建筑工程专业建筑相关专业可大致分为地产圈和房地产圈。地产圈中涉及到建筑历史与理论、建筑设计及其理论、城市规划与设计、建筑技术科学、景观规划设计(景观建筑学)、设计艺术学(美术学、室内设计)、建筑遗产保护与管理等方向;房地产圈中涉及到管理科学与工程、土地市场管理(土地资源管理)、房屋验收管理。热门院校:清华大学、同济大学、东南大学、天津大学、重庆大学。就业前景:一般会在建筑设计单位、设计所、工作室、等相关单位从事工作。目前国家建筑师的缺口很大,完全不能满足目前的需求,并且由于它的专业性极强和无可替代性,建筑师的年薪也就水涨船高,一般的建筑师年薪会达到10万元至15万元,成熟的建筑师年薪可达到20万元至30万元,故这个专业也真正成为了金饭碗专业。英语专业真的不掉线吗?、?英语专业在研究生阶段一般划分为3个主要方向(硕士点):文学、语言学和翻译。其中,文学以感性知识(文学评论等)为主,适合文科背景较强的考生跨考;语言学以理性的理论知识为主,与各学科结合紧密,文理科背景的考生都适合跨考;翻译介于二者之间,既需要理论知识又需要对语言的感性认识和实践,除专业翻译领域之外,还是比较适合对文字有感悟力的文科考生报考。热门院校:北京大学、南京大学、厦门大学、上海外国语大学、北京第二外国语学院。就业前景:与英语专业有关的行业如外贸、外交、海关、旅游等涉及外交的事情部分获得前所未有的发展转化的关键,使得我国对英语人材的需求数量越来越大。据劳动人事部统计,英语专业毕业生的就业率一直在各专业中居于前10位,即使在最近几年来大学生来就有业普遍不景气的情况下,大多数院校英语专业毕业生的就业率仍然保持90%以上。真的不掉线吗?、?序言 译者:leondu,作者保留版权,转载请注明出处。 Acegi Security为基于J2EE的企业应用软件提供全面的安全解决方案。正如你在本手册中看到的那样,我们尝试为您提供有用的,高可配置的安全系统。 安全是一个永无止境的目标,获取一个全面的,系统级的实现方式是至关重要的。在安全界,我们鼓励你采用分层安全,这样每个层都确保自身尽可能的安全,另 外的层提供另外的安全。每个层自身越紧密,你的系统就越鲁棒和安全。在底层,你要处理传输入安全和系统认证,减少中间人攻击(man-in-the-middle attacks)。接下来你要使用防火墙,结合VPN或者IP安全来确保只有认证过的系统能够尝试连接。在企业环境中,你可能部署DMZ(demilitarized zone,隔离区)来把面向公众的服务器和后端的数据和应用服务器分隔开。在以非授权用户运行进程和文件系统安全最大化上,你的操作系统也将扮演一个关键的角色。接下来你要防止针对系统的拒绝服务和暴力攻击。入侵检测系统在检测和应对攻击方面尤其有用,这些系统可以实时屏蔽恶意TCP/IP地址。在更高层上,你的Java虚拟机需要进行配置,将授予不同Java类型的权限最小化,然后,你的应用程序要对添加针对自身特定问题域的安全配置。Acegi Security使后者应用程序安全变得容易。 当然,你要正确对待上述提到的每个安全层,以及包含于每个层的管理因素。这样的管理因素具体包括:安全公告监测,补丁,人工诊断,审计,变更管理,工程管理系统,数据备份,灾难恢复,性能评测,负载监测,集中日志,应急反应程序等等。 Acegi Security专注于在企业应用安全层为您提供帮助,你将会发现和各式各样的需求和商业问题领域一样多。银行系统的需求和电子商务应用的需求不同。电子商务应用和售卖军用自动工具的公司的需求不同。这些客户化的需求使得应用安全显得有趣,富有挑战性而且物有所值。 本手册为Acegi Security 1.0.0的发布而大规模重新组织。请先阅读Part I 架构概览。手册的其余部分按照传统的手册方式编排,需要一定的基础才能阅读。 我们希望您会觉得手册有用,并且欢迎您提供反馈意见和建议。Part I. 架构概览 象其他的软件一样,Acegi Security也有在整个框架中都会使用的特定核心接口,类,和概念抽象。在手册的这一部分,在检视这些规划和执行Acegi Security集成所必须的核心要素之前,我们先介绍Acegi Security。第一章. 简介1.1. Acegi Security是什么?真的不掉线吗?、? Acegi Security为基于J2EE的企业软件应用提供全面的安全服务。特别是使用领先的J2EE解决方案Srping框架开发的项目。如果您不是使用Spring开发企业应用,我们温馨提醒您仔细研究一下。熟悉Spring,尤其是依赖注射原理,会极大的帮助你快速掌握Acegi Security。 人们使用Acegi Security有很多种原因,不过通常吸引他们到这个项目的原因是他们在J2EE的 Servlet Specification 或者 EJB Specification中找不到迫切需要的典型企业应用场景。提到这些规范,特别要提出的是他们不是在WAR或者EAR级别可移植的。这样,如果你切换服务器环境,一般来说你要在目标环境中花费很多工夫来重新配置你的应用安全。使用Acegi Security解决了这些问题,并且为你提供了很多其他有用的,完全可定制的安全特性。 如你所知,安全包含两个主要操作。第一个被称为认证,是为用户建立一个它所声明的principal。Principal通常代表用户,设备,或者其他能在你的应用中执行操作的其他系统。授权指判定一个principal能否在你的系统中执行某个操作。在到达授权判断之前,principal的的身份认证已经由认证过程执行过了。这些概念是通用的,不是Acegi Security特有的。 在认证层面,Acegi Security广泛支持各种认证模块。这些认证模块绝大多数是第三方提供,或者相关的标准组织开发的,例如Inter Engineering Task Force。作为补充,Acegi Security自己也提供了一些认证功能。 Acegi Security当前支持如下的认证技术。 HTTP BASIC authentication headers (an IEFT RFC-based standard) HTTP Digest authentication headers (an IEFT RFC-based standard) HTTP X.509 client certificate exchange (an IEFT RFC-based standard) LDAP (a very mon approach to cross-platform authentication needs, especially in large environments) Form-based authentication (for simple user interface needs) puter Associates Siteminder JA-SIG Central Authentication Service (otherwise known as CAS, which is a popular open source single sign on system) Transparent authentication context propagation for Remote Method Invocation (RMI) and HttpInvoker (a Spring remoting protocol) Automatic remember-me authentication (so you can tick a box to avoid re-authentication for a predetermined period of time) Anonymous authentication (allowing every call to automatically assume a particular security identity) Run-as authentication (which is useful if one call should proceed with a different security identity) Java Authentication and Authorization Service (JAAS)真的不掉线吗?、? Container integration with JBoss, Jetty, Resin and Tomcat (so you can still use Container Manager Authentication if desired) 你自己的认证系统 (如下所示) 很多独立软件供应商(ISVs)选择Acegi Security是因为它具有丰富的认证模块。这样无论他们的终端客户需要什么,他们都可以快速集成到他们的系统中,不用花很多工夫或者让终端客户改变环境。如果Acegi Security System for Spring的7个认证模块还没有满足你的需求的话,Acegi Security是一个开放的系统,很容易写你自己的认证机制。许多Acegi Security的企业用户需要和遗留系统集成,这些遗留系统不遵循任何安全标准,Acegi Security能够和这样的系统合作愉快。 有时候基本的认证是不够的。有时候你需要根据principal和应用交互的方式来应用不同的安全措施。例如,你可能为了防止密码被窃取,或者防止终端用户受到中间人攻击,需要保证到达的是请求通过HTTPS的。或者,你要确保是一个真正的人而不是某种机器人或者自动进程在发送请求。这对于保护密码恢复不受暴力破解攻击,或者防止他人很容易的复制你应用的关键内容。为了帮助你实现这些目标,Acegi Security完全支持自动通道安全(channel security),以及集成Jcaptcha来检测是否是真正人类用户。 Acegi Security不仅提供了认证功能,而且提供了完备的授权功能。在授权方面主要有三个领域,授权web请求,授权方法调用,授权存取单个领域对象实例。为了帮助你理解这些区别,对照考虑一下Servlet 规范中的web模式安全的授权功能,EJB容器管理安全以及文件系统安全。Acegi Security提供了所有这些重要领域的完备功能,我们将在本手册的后面介绍。1.2. 历史 Acegi Security始于2003年晚期,当时在Spring Developers邮件列表中有人提问是否有人考虑提供一个基于Spring的安全实现。当时,Srping的社区是相对比较小的(尤其是和今天相比!),实际上Spring本身也是2003年早期才作为一个SourceForge项目出现的。对此问题的回应是它确实是一个值得研究的领域,虽然限于时间无法进行深入。 有鉴于此,这个简单的安全实现虽然构建了但是并没有发布。几周以后,Spring社区的其他成员询问了安全框架,代码就被提供给了他们。随后又有人请求,到了2004年一月,大约有20人左右在使用这些代码。另外一些人加入到这些先行的用户中来,并建议建立一个SourceForge项目,这个项目在2004年3月建立起来。 在早期,该项目自身并不具备任何认证模块。认证过程依赖容器管理安全(Container Managed Security)而Acegi Security注重授权。在一开始这样是合适的,但是随着越来越多的用户要求额外的容器支持,基于容器的认证的限制就显示出来了。另外一个相关的问题是添加新的JAR文件到容器的classpath,通常会让最终用户感到困惑并且配置错误。 随后,Acegi Security加入了认证服务。大约一年后,Acegi Security成为了一个Spring Framework官方子项目。在2年半多的在多个软件项目中的活跃使用以及数以百计的改进和社区贡献,1.0.0最终版在2006年5月发布。 今天,Acegi Security成为一个强大而活跃的社区。在支持论坛上有数以千计的帖子。14个开发人员专职开发,一个活跃的社区也定期共享补丁并支持他们的同侪。1.3. 发行版本号 理解Acegi Security的版本号是非常好处的,它可以帮助你判定升级的到新的版本是否需要花费很大精力。我们的正式发真的不掉线吗?、?行版本使用Apache Portable Runtime Project版本指引,可以在下述查看/versioning.html。为了您查看方便,我们引用该页的说明部分如下: 版本号由三个部分的整数组成:主版本号(MAJOR)、副版本号(MINOR)、补丁版本号(PATCH)。主要的含义是主版本号(MAJOR)是不兼容的,API大规模升级。副版本号(MINOR)在源文件和可执行版和老版本保持兼容,补丁版本号(PATCH)则意味着向前和向后的完全兼容。第二章. 技术概览2.1. 运行时环境 Acegi Security可以在JRE1.3中运行。这个发行版本中支持也Java 5.0,尽管对应的Java类型被分开打包到一个后缀是tiger的包中。因为Acegi Security致力于以一种自包含的方式运行,因此不需要在JRE中放置任何特殊的配置文件。特别无需配置Java Authentication and Authorization Service (JAAS)策略文件或者将Acegi Security放置到通用的classpath路径中。 同样的,如果你使用EJB容器或者Servlet容器,同样无需放置任何特别的配置文件或者将Acegi Security包含在服务器的类加载器(classloader)中。 上述的设计提供了最大的部署灵活性,你可以直接把目标工件(JAR, WAR 或者 EAR))直接从一个系统copy到另一个系统,它马上就可以运行起来。2.2. 共享组件 让我们来看看Acegi Security中最重要的一些共享组件。所谓共享组件是指在框架中处于核心地位,系统脱离了它们之后就不能运行。这些Java类型代表了系统中其他部分的构建单元,因此理解它们是非常重要的,即使你不需要直接和它们打交道。 最基础的对象是SecurityContextHolder。在这里存储了当前应用的安全上下文(security context),包括正在使用应用程序的principal的详细信息。SecurityContextHolder默认使用ThreadLocal来存储这些详细信息,这意味着即便安全上下文(security context)没有被作为一个参数显式传入,它仍然是可用的。如果在当前principal的请求处理后清理线程,那么用这种方式使用ThreadLocal是非常安全的。当然, Acegi Security自动为你处理这些,所以你无需担心。 有些应用程序由于使用线程的方式而并不是完全适用ThreadLocal。例如,Swing客户端可能需要一个Java Virtual Machine中的所有线程都使用同样的安全上下文(security context)。在这种情况下你要使用SecurityContextHolder.MODE_GLOBAL模式。另外一些应用程序可能需要安全线程产生的线程拥有同样的安全标识符(security identity)。这可以通过SecurityContextHolder.MODE_INHERITABLETHREADLOCAL来实现。你可以通过两种方法来修改默认的SecurityContextHolder.MODE_THREADLOCAL。第一种是设置一个系统属性。或者,调用SecurityContextHolder的一个静态方法。大部分的应用程序不需要修改默认值,不过如果你需要,那么请查看SecurityContextHolder的JavaDocs获取更多信息。 我们在SecurityContextHolder中存储当前和应用程序交互的principal的详细信息。Acegi Security使用一个Au真的不掉线吗?、?thentication对象来代表这个信息。尽管你通常不需要自行创建一个Authentication对象,用户还是经常会查询Authentication对象。你可以在你的应用程序中的任何地方使用下述的代码块:Object obj =SecurityContextHolder.getContext().getAuthentication().getPrincipal();if (obj instanceof UserDetails) String username =(UserDetails)obj).getUsername(); else String username =obj.toString(); 上述的代码展示了一些有趣的联系和关键的对象。首先,你会注意到在SecurityContextHolder和Authentication之间有一个媒介对象。SecurityContextHolder.getContext() 方法实际上返回一个SecurityContext。Acegi Security使用若干个不同的SecurityContext实现,以备我们需要存储一些和principal无关的特殊信息。一个很好的例子就是我们的Jcaptcha集成,它需要知道一个需求是否是由人发起的。这样的判断和principal是否通过认证完全没有关系,因此我们将它保存在SecurityContext中。 从上述的代码片段可以看出的另一个问题是你可以从一个Authentication对象中获取一个principal。Principal只是一个对象。通常可以把它cast为一个UserDetails对象。UserDetails在Acegi Security中是一个核心接口,它以一种扩展以及应用相关的方式来展现一个principal。可以把UserDetails看作是你的用户数据库和Acegi Security在SecurityContextHolder所需要的东西之间的一个适配器(adapter)。作为你自己用户数据库的一个展现,你可能经常要把它cast到你应用程序提供的原始对象,这样你就可以调用业务相关的方法(例如 getEmail(), getEmployeeNumber()。 现在你可能已经开始疑惑,那我什么时候提供UserDetails对象呢?我要如何提供呢? 我想你告诉过我这个东西是声明式的,我不需要写任何Java代码那怎么做到呢?对此的简短回答就是有一个叫做UserDetailsService的特殊接口。这个接口只有一个方法,接受一个Sring类型的参数并返回一个UserDetails。Acegi Security提供的大多数认证提供器将部分认证过程委派给UserDetailsService。UserDetailsService用来构建保存在SecurityContextHolder中的Authentication对象。好消息是我们提供若干个UserDetailsService的实现,包括一个使用in-memory map和另一个使用JDBC的。 大多数用户还是倾向于写自己的实现,这样的实现经常就是简单的构建于已有的Data Access Object (DAO)上,这些DAO展现了他们的雇员、客户、或者其他企业应用程序中的用户。要记得这样做的好处,不论你的UserDetailsService返回什么,它总是可以从SecurityContextHolder中获取,象上面的代码显示的那样。 除了principal,Authentication提供的另一个重要方法就是getAuthorities()。这个方法返回一个GrantedAuthority对象数组。GrantedAuthority,毫无疑问,就是授予principal的权限。这些权限通常是角色,例如ROLE_ADMINISTRATOR 或者ROLE_HR_SUPERVISOR。这些角色稍后配置到web授权,方法授权和领域对象授权。Acegi Security的其他部分能够处理这些权限,并且期待他们被提供。通常你会从UserDetailsService中返回GrantedAuthority对象。真的不掉线吗?、? 通常GrantedAuthority对象都是应用范围的权限。它们都不对应特定的领域对象。因此,你应该不会有一个代表54号员工对象的GrantedAuthority,因为这样会有数以千计的authority,你马上就会用光所有内存(或者,至少会让系统花太长时间来认证一个用户)。当然,Acegi Security会高效的处理这种普遍的需求,但是你不会使用领域对象安全功能来实现这个目的。 最后,但不是不重要,你有时候需要在HTTP 请求之间存储SecurityContext。另外有些时候你在每次请求的时候都会重新认证principal,不过大部分时候你会存储SecurityContext。HttpSessionContextIntegrationFilter在HTTP之间存储SecurityContext。正如类名字显示的那样,它使用HttpSession来进行存储。基于安全原因,你永远都不要直接和HttpSession交互。没有理由这么做,所以记得使用SecurityContextHolder来代替。让我们回忆一下,Acegi Security的基本组成构件是: SecurityContextHolder,提供对SecurityContext的所有访问方式。 SecurityContext, 存储Authentication以及可能的请求相关的安全信息。 HttpSessionContextIntegrationFilter, 在web请求之间把SecurityContext存储在HttpSession中。 Authentication, 以Acegi Security的方式表现principal。 GrantedAuthority, 表示赋予一个principal的应用范围的权限。 UserDetails, 为从你的应用程序DAO中获取必要的信息来构建一个Authentication 对象。 UserDetailsService,用传入的String类型的username(或者认证ID,或类似)来创建一个UserDetails。 现在你已经理解了这些重复使用的组件,让我们仔细看看认证过程吧。2.3. 认证 正如我们在手册开始部分所说的那样,Acegi Security适用于很多认证环境。虽然我们建议大家使用Acegi Security自身的认证功能而不是和容器管理认证(Container Managed Authentication)集成,但是我们仍然支持这种和你私有的认证系统集成的认证。让我们先从Acegi Security完全自行管理管理web安全的角度来探究一下认证,这也是最复杂和最通用的情形。 想象一个典型的web应用的认证过程:1你访问首页,点击一个链接。2一个请求被发送到服务器,服务器判断你是否请求一个被保护的资源。3因为你当前未被认证,服务器发回一个回应,表明你必须通过认证。这个回应可能是一个HTTP回应代码,或者重定向到一个特定的网页。4基于不同的认证机制,你的浏览器会重定向到一个网页好让你填写表单,或者浏览器会用某种方式获取你的身份认证(例如真的不掉线吗?、?一个BASIC认证对话框,一个cookie,一个X509证书等等。)。5浏览器会发回给服务器一个回应。可能是一个包含了你填写的表单内容的HTTP POST,或者一个包含你认证详细信息的HTTP header。6接下来服务器会判断提供的认证信息是否有效。如果它们有效,你进入到下一步。如果它们无效,那么通常请求你的浏览器重试一次(你会回到上两步)。7你引发认证的那个请求会被重试。但愿你认证后有足够的权限访问那些被保护的资源。如果你有足够的访问权限,请求就会成功。否则,你将会受到一个意味禁止的HTTP403错误代码。 在Acegi Security中,对应上述的步骤,有对应的类。主要的参与者(按照被使用的顺序)是:ExceptionTranslationFilter, AuthenticationEntryPoint, 认证机制(authentication mechanism), 以及AuthenticationProvider。 ExceptionTranslationFilter是Acegi Security用来检测任何抛出的安全异常的过滤器(filter)。这种异常通常是由AbstractSecurityInterceptor抛出的,它是授权服务的主要提供者。我们将会在下一部分讨论AbstractSecurityInterceptor,现在我们只需要知道它产生Java异常,并且对于HTTP或者如何认证一个principal一无所知。反而是ExceptionTranslationFilter提供这样的服务,它负责要么返回403错误代码(如果principal通过了认证,只是缺少足够的权限,象上述第7步那样),要么加载一个AuthenticationEntryPoint (如果principal还没有被认证,那么我们要从第3步开始)。 AuthenticationEntryPoint负责上述的第3步。如你所想,每个web应用都有一个默认的认证策略(象Acegi Security中几乎所有的东西一样,它也是可配置的,不过我们现在还是还是从简单开始)。每个主流的认证系统都有它自己的AuthenticationEntryPoint实现,负责执行第3步中描述的动作。 当浏览器确定要发送你的认证信息(HTTP 表单或者HTTP header),服务器上需要有什么东西来收集这些认证信息。现在我们在上述的第6步。在Acegi Security中对从用户代理(通常是浏览器)收集认证信息有一个特定的名字,这个名字是认证机制(authentication mechanism)。当认证信息从客户代理收集过来以后,一个认证请求(Authenticationrequest)对象被创建,并发送到AuthenticationProvider。 Acegi Security中认证的最后一环是一个AuthenticationProvider。非常简单,它的职责是取用一个认证请求(Authentication request)对象,并且判断它是否有效。这个provider要么抛出一个异常,要么返回一个组装完毕的Authentication对象。还记得我们的好朋友UserDetails 和 UserDetailsService吧?如果没有,回到前一部分重新回忆一下。大部分的AuthenticationProviders都会要求UserDetailsService提供一个UserDetails对象。如前所述,大部分的应用程序会提供自己的UserDetailsService,尽管有些会使用Acegi Security提供的JDBC或者 in-memory实现。作为成品的UserDetails 对象,特别是其中的GrantedAuthoritys,在构建完备的Authentication对象时会被使用。 当认证机制(authentication mechanism)取回组装完全的Authentication对象后,它将会相信请求是有效的,将Authentication放到SecurityContextHolder中,并且将原始请求取回(上述第7步)。反之,AuthenticationProvider则拒绝请求,认证机制(authentication mechanism)会请求用户重试(上述第2步)。 在讲述典型的认证流程的同时,有个好消息是Acegi Security不关心你是如何把Authentication放到SecurityContextHolder内的。唯一关键的是在AbstractSecurityInterceptor授权一个请求之前,在SecurityContextHolder中包含一个代表了principal的Authentication。 你可以(很多用户确实)实现自己的过滤器(filter)或者MVC控制器(controller)来提供和不是基于Acegi Security真的不掉线吗?、?的认证系统交互。例如,你可能使用使用容器管理认证(Container Managed Authentication),从ThreadLocal或者JNDI中获取当前用户信息,使得它有效。或者,你工作的公司有一个遗留的私有认证系统,而它是公司标准,你对它无能为力。在这种情况之下也是非常容易让Acegi Security运作起来,提供认证能力。你所需要做的是写一个过滤器(或等价物)从某处读取第三方用户信息,构建一个Acegi Security式的Authentication对象,把它放到SecurityContextHolder中。这非常容易做,也是一种广泛支持的集成方式。2.4. 安全对象 如果你熟悉AOP,你会知道有很多种advice可用:before, after, throws 和 around。around advice非常有用,因为它能够选择是否选择是否执行一个方法调用,是否修改返回值,以及是否抛出异常。Acegi Security对方法调用和web请求都提供around advice。我们使用AOP联盟实现对方法调用的around advice,对于web请求的around advice则是使用标准的过滤器(Filter)。 对于那些不熟悉AOP的人来说,关键是要理解Acegi Security能够帮助你保护方法调用以及web请求。大多数人对保护他们服务层的方法调用感兴趣。这是因为在当前的J2EE应用中,服务层包含了大多数的业务逻辑(声明,作者不赞成这种设计,反而支持正确封装的领域模型以及DTO,assembly, facade 以及 transparent persistence patterns,而不是当前主流的贫血模型,我们将在这里讨论)。如果你需要保护service层的方法调用,使用标准的Spring AOP平台(或者被成为AOP 联盟(AOP Alliance)就足够了。如果你需要直接对领域模型进行保护,那么可以考虑使用AspectJ。 你可以选择对使用AspectJ 或者AOP联盟(AOP Alliance)对方法进行授权,或者你可以选择使用过滤器(filter)来对web请求进行授权。你将0个,1个,2个或者3个这些方法一起使用。主流的用法是执行一些web请求授权,以及在服务层使用AOP联盟(AOP Alliance)对一些方法调用授权。 Acegi Security使用安全对象(secure object)这个词来指任何能够将安全应用于其上的对象。每个Acegi Security支持的安全对象都有自己的类,它是AbstractSecurityInterceptor的子类。重

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论