分类 生活 下的文章

古至今来,人类经典皓若星辰。

经过时间筛选,取一瓢,列出这一百部人类史诗般著作。

通过他们,足能穿透人心,见其鲜红与赤诚。

人性之善,人性之恶,世间多温热,世态多薄凉,浮浮沉沉,生生杀杀,看尽人类丛林无影的刀和嗜血的剑。

生于豪门,出于卑贱,家产助才华,片纸开天眼,如痴如醉,疯疯傻傻, 写透肉躯凡心刻骨的爱和夺魂的情。

《人生的启示——百部不可不看的经典》点赞和关注,免费发给您!


基督教的经典——《圣经》

迄今为止,世界上印数最多、发行最广、翻译文种最多的书籍,并已被列入吉尼斯世界记录大全,联合国公认是对人类影响最大最深的一本书。

《圣经》本身是一部重要的文学作品。欧洲文学史上的许多伟大作品都取材于《圣经》,如英国作家弥尔顿的长篇史诗《失乐园》、班扬的《天路历程》、俄罗斯作家托尔斯泰的《复活》等都受到《圣经》的影响。

古希腊著名哲学家——苏格拉底

柏拉图是他的学生,亚里士多德是柏拉图的学生。在希腊,以及后来的罗马有名气的哲学学校都奉苏格拉底为鼻祖。

他的言行,多见于柏拉图大量的对话录和色诺芬的《苏格拉底言行回忆录》中。

苏格拉底说:“大家把我当成雅典最有学问的人,是因为我是雅典城里惟一知道自己是一无所知的人。”

西方思想之父——柏拉图

公元前427年,柏拉图出生于古希腊一个显赫的贵族奴隶主家庭。

柏拉图深受苏格拉底思想的影响,他的《理想国》、《饮宴篇》、《斐多篇》《大希庇阿斯篇》、《巴门尼德篇》 等,不但是伟大的哲学著作,同时也是世界文学的经典杰作。

百科全书式的学者——亚里士多德

公元前384年,亚里士多德岀生于希腊北部斯塔吉拉城。

受家庭的影响,亚里士多德很早就跟着父亲学习医学知识。17岁时,亚里士多德跟随柏拉图学习。

亜里士多德由于受貴族生活的影响,不仅举止温文尔雅,连说话也非常讲究语调柔和,当然衣着也十分讲究。

亚里士多德一生勤于著述,写下了大量的著作,其中大部分已经散失,现留下的有《物理学》、《形而上学》、《工具 论》、《伦理学》、《论灵魂》、《政治学》、《修辞学》、《诗学》等。 其著作之浩繁,内容之广泛,前无古人,后无来者。其学术思想著作几乎涉及了所有学术领域,并成为了1500年后艾艺复兴运动的火种。

现代实验科学之父——培根

弗朗西斯•培根出生于英国伦敦一个新贵族家庭。

16岁开始,依据自己的经历撰写了第一本政论集《欧洲札记》。23岁时培根当选为英国下议院议员。1618年29岁,获得了被人们认为是官场阶梯的最高职务——大法官。接着他又被摂予了男爵、子爵等爵位。

他的第一部重要作品《论谈随笔文集》以简洁而字字闪光的风格写成,显示岀他不同凡响的观察力。

《新工具》也许是培根最重要的著作了,该书的主要目的是要让人们接受经验主义的方法。最后一本书是《新大西岛》,该书描述了一个位于太平洋虚构岛上的乌托邦式的故事,他想告诉人们,科学研究的应用可以使欧洲人民和那些生活在神奇海岛上的居民一样享受到繁荣与欢乐。

杰出的启蒙思想家——卢梭

让•雅克•卢梭生于瑞士日内瓦。

卢梭从小聪明机灵,他没有像富家子弟那样受过系统教育,但爱读书的习惯使他成了 一个知识丰富的人。

母亲去世后,留给他不少 的书,有哲学的、历史的,更多的是小说。父亲常和卢梭晚饭后相对朗读,有时通宵达旦沉醉在书的世界里。7岁时他已把家中所有的书都读完了。

他发表了《论人类不平等的起源与基础》,他在这篇文章中指出广自然界中很少有不平等的现象。

卢梭认为:“每一个人都生而自由、平等”。“不平等” 并不是与生俱来的,而是后天形成的。

在卢梭短短66年的生命中,《人类不平等的起源》、《社 会契约论》、《爱弥尔》、《新爱洛绮丝》、《忏悔录》、《对话录》、《孤独散步者的梦想》等一部部经典巨著的发表,接二 连三地震动法国、欧洲、甚至整个世界。

社会主义的奠基人——马克思

1818年5月5日,卡尔*马克思出生于德国莱茵省特里尔城一个律师家庭。

马克思的著作构成了共产主义和近代社会主义理论的基础。

马克思去世吋,没有任何一个国家将他的理论付诸实践,然而,一个世纪之后,社会主义国家在很多地区建立,在他的理论指导下,一系列的社会主义运动不断发生、蓬勃兴起。可以说,世界上没有任何一位哲学家的影响能够与马克思相提并论,他影响了很多人的命运,如列宁、斯大林、毛泽东等。

马克思逝世后一个世纪,信仰马克思主义的人数已超过了 10亿这个数字,超过了人类历史上任何一种信仰的人数。


古希腊最伟大的科学家——阿基米德

公元前285年,阿基米徳生于西西里岛一个繁华的城市叙拉古。'他出身于书香门第。

少年时代的阿基米徳根据自己长期观察的结果曾发明了一个能用水力推动的行星仪,这种行星仪在水力推动下, 能模仿太阳、月亮、行星和地球运动,还能将日蚀和月蚀准确地演示岀来。

阿基米德取得的成就是多方面的,他将算术、力学、几何学、天文学、机械工程技术等学科大大向前推进了一步。

他是现代数学分析的先驱、静力学的奠基人、液体静力学的创始者、螺旋扬水机的发明者、建造起重机和投石机的工程师。 他是古希腊最伟大的科学家。

现代天文学奠基人——哥白尼

1473年2月19日,“文化巨匠”和现代天文学奠基人的尼古拉-哥白尼出生于波兰维斯瓦河畔的托伦城。

少年的哥白尼先后失去父母,并由舅舅抚养长大。舅舅 是一个学识渊博,思想开明的人文主义者,他把哥白尼带进 了一个崭新的天地。1503年,哥白尼获得了教会法博士学位。

哥白尼认为平常人们以为太阳绕地球运转是错误的。

真理是不可战胜的。继哥白尼之后,无数科学家锲而不舍,努力探索,以无可辩驳的论据证明了哥白尼理论的正确性。

罗马教廷不得不在300多年后宣布取消对《天体运行论》一书的査禁。哥白尼的天文学思想才被世人广泛接受。

近代科学之父——伽利略

1564年,伽利略出生于意大利的古城比萨一个没落的贵族家庭,他的父亲是一位音乐师。伽利略自幼天资聪颖、多 思好问。他的父亲十分看重这个长子,他最大的愿望是将儿子培养成医生。

伽利略死后的1979年11月10日,罗马教皇承认17世纪30年代伽利略受到的教廷审判是不公正的。

城如教皇乌尔班八仕 写给费迪南德大公的信中所说:“只要木星的光芒在天空中闪燿,地球上的人就永远不会忘记伽利略。“

解析几何创始人——笛卡尔

1596年3月31日,笛卡尔出生于法国克勒滋河右岸一个古老的贵族家庭,他的父亲是布列塔尼议会的议员。

在解析几何学中,应用笛卡尔宜角坐标系,可以将几何图形转化为代数方程来研究,亦可将代数方程画成几何图形来研究。

1649年底,笛卡尔开始应约为瑞典女王讲授哲学,由于时常冒着刺骨的寒风去给女王上课,他于次年2月I日感冒,随即转成肺炎,2月11日笛卡尔英年早逝,年仅54岁。

他的墓志铭这样写道:笛卡尔,欧洲文艺复兴以来第一 个为人类争取并保证理性权利的人。

科学巨人——牛顿

1642年圣诞节,即12月25日,艾萨克・牛顿涎生于英格兰东部小镇乌尔斯索普的一个农户家庭:这一年,正是伽利略去世的那一年。

牛顿曾说过一段发人深思的话:“我不知道在别人看来,我是什么样的人;但在我自己看来,我不过就像是 一个在海滨玩耍的小孩,为不时发现比寻常更为光滑的卵石或更为美丽的贝壳而沾沾自喜,而面对展现在我们面前的浩瀚的真理的海洋,却全然没有发现……如果说我所见的比前人更远一点的话,那是因为我是站在巨人肩膀上的缘故。”

生理学之父——巴甫洛夫

1849年9月26日,巴甫洛夫诞生在俄国中部小城梁赞,他的父亲是位乡村牧师,母亲替人家做饭贴补家用。

他是第一个享受这个荣誉的俄国科学家。巴甫洛夫第一个用生理学实验方法来研究高等动物和人的大脑活动,并创立 了大脑两半球生理学和反射学说。

一部划时代的著作——《物种起源》

1859年11月24日,《物种起源》在英国伦敦出版,第一版1250册在出版之日即全部售罄。它是进化论的奠基人达尔文的第一部巨著。这部著作的问世,第一次把生物学建立在科学的基础上,以全新的生物逬化思想推翻了“神创论”和“物种不变”的理论。

现代“救世箴言“——《全球通史》

本书是斯塔夫里阿诺斯最重要的一部著作,分为《1500 年以前的世界》和《1500年以后的世界》两册。

作者采用全新的史学观点和方法,将整个世界看做一个不可分割的有机的统一体,从全球的角度而不是某一国家或某一地区的角度来考察世界各地区人类文明的产生和发展,把研究的重点放在对人类历史事件和它们之间的相互关联和相互影响上,努力反映局部与整体的对抗以及它们之间的相可作用。

全节 材料新、范围广,除了政治、经济外,还涉及军事、文化、教育、 宗教、科学技术等各个方面,并吸收了20年来世界历史学研究领域的新成就,读来颇觉新颖,有强烈的现实感。

权力斗争的教科书——《君王论》

16世纪30年代起,《君王论》风靡一时,但在50年代未被列为禁书,直到19世纪70年代才得以恢复名誉,进而畅销世界。欧洲的若干学者都相信,千百年来,《君王论》是人类写过的三部具有永恒价值的处世智慧奇书之一。

19世纪军事理论顶峰的伟大之作——《战争论》

克劳塞维茨是普鲁士军事理论家,西方近代军事理论奠基者。他先后研究了 1566 ~ 1815年间所发生的130多个战例,总结了自己所经历的凡次故争的经验,在此基础上写出了一部体系庞大、内容丰富的军事理论著作——《战争论》。

发动一场战争的小说——《汤姆叔叔的小屋》

1851年,斯陀夫人在丈夫体弱多病、家境极其贫寒的情况下写成其生平最有影响的作品——《汤姆叔叔的小屋》。

本书在启发民众的反奴隶制情绪上起了重大作用,被视为美国内战的起因之一。林肯总统后来接见斯陀夫人时戏谑地称她是“写了 一本书,酿成 了一场大战的小妇人”,这一句玩笑话充分反映了《汤姆叔叔的小屋》这部长篇小说的巨大影响。

灵魂的哲学诗——《红与黑》

《红与黑》是法国现实主义作家司汤达的代表作。

自 1830年问世以来,赢得了世界各国一代又一代读者的心,特别为年轻人所喜爱。

作品所塑造的“少年野心家”于连是个具有高度典型意义的人物形象,已成为个人奋斗的野心家的代名词。

法国现代生活的长篇史诗—《悲惨世界》

《悲惨世界》一书中,雨果以卓越的艺术魅力展示了资本主义社会奴役劳动人民、逼良为娼的残酷现实。

雨果的这部传世之作,创造了一部反映法国现代社会生活和政治生活的长篇史诗。

全书时间跨度长达近半个世纪,个人命运与历史题材的结合,气势磅礴,色彩瑰丽,最大限度地体现了雨果在叙事方面的过人才华。


魔幻现实主义代表作——《百年孤独》

被誉为“再现拉丁美洲历史社会图景的鸿篇巨著”的 《百年孤独》,是加西亚-马尔克斯的代表作,也是拉丁美洲魔幻现实主义文学作品的代表作。

作家通过布思地亚家族7代人充满神秘色彩的坎坷经历,来反映哥伦比亚乃至拉丁美洲的历史演变和社会现实,要求读者思考造成百年孤独的原因,从而去寻找摆脱命运摆弄的正确途径。

人可以被毁灭,却不可以被战胜——《老人与海》

1952年,海明成发表了他最优秀的作品《老人与海》。该书岀版仅48小时就销量惊人,当年获得了普利策文学奖。

当他被宣布为当年的普利策文学奖得主时,评论界一致称好。人可以被毁灭,却不可以被战胜是海明成在《老人 与海》里所说的话,不仅打动了读者,也征服了评论者。

西方经济学的“圣经”——《国富论》

英亚当•斯密所著的《国富论》,全名为《国民财富的性 质和原因的研究》,此书初版于1776年,就是美国《独立宣言》发表的那一年。

他在封建欧洲解体之末、近代世界开始之时写作,在这个世界中,封建制度仍以既得利益集团经常表现的顽固性在坚持。

他正是为反对这种利益集团而写作的,结果是,他的书不只是为图书馆架藏而写的,它对经济意见和国家政策产生了深刻的影响,它形成了我们今天住在其中的整个生活环境。

爱情经典之花——《飘》

美国女作家玛格丽特•米切尔是仅仅写了一部作品就名扬天下并在文坛上占有一席之地的作家。

她惟一的作品 《飘》一经问世便成了美国小说中最畅销的作品。这部长达1000页的巨著震撼了美国。

1937年,小说获得普利策文学奖。更使它名扬天下的是根据小说改编而成的电影《乱世佳人》一举夺得10项奥斯卡大奖,并成为电影史上经典名片之首。

生活教科书——《钢铁是怎样炼成的》

《钢铁是怎样炼成的》这部激励了无数人的杰作,自问世以来60多年长盛不衰。

究其原因,除了该书真实而深刻地描绘了十月革命前后乌克兰地区的广阔生活画卷外,还塑造了保尔•柯察金执着于信念而坚韧不拔的崇高人格,其形象超越时空,产生了世界性的影响,震动着数代人的心弦。

值得一生去体会的书——《小王子》

《小王子》是一本与《圣经》同样畅销的世界名著,在全球范围内被翻译成42种文字。

1993年出版50周年时,法国政府以其作者圣埃克苏佩里的肖像发行50元钱券纪念他。 很多近代有名的作家均认为自己在写作上受这本书的影响很大。

喜欢《小王子》,好像不需要理由,只要你曾经有过这祥的快乐和不快乐,这样的执著或是放弃。无论你是孩子、大人,无论你的教育程度、职业、性别和国籍如何,阅读这本书, 你一样可以全心微笑;无论你的身份如何,你都可以用自己的方式去读它,无论你的心情如何。

这是一本值得你一生阅读并去体会的书!

一部世界昆虫史诗——《昆虫记》

19世纪未,法国杰出的昆虫学家、文学家法布尔捧出一 部《昆虫记》,世界响起了一片赞叹之声。没有哪个昆虫学家有法布尔那么高的文学修养,没有哪个文学家有法布尔那么高的昆虫学造诣,《昆虫记》堪称科学与文学完美结合的典范。

阿拉伯社会生活的百科全书——《一千零一夜》

《一千零一夜》是古代阿拉伯民间故事集,在西方被称为 《阿拉伯之夜》,我国却有一个独特的称呼:《天方夜谭》。它 是世界上最具生命力、最负盛名、拥有最多读者和影响最大的作品之一;同时,它以民间文学的朴素身份却能跻身于世界古典名著之列,也堪称是世界文学史上的一大奇迹。

含笑的悲剧——《堂吉诃德》

《堂吉诃德》是西班牙伟大的作家塞万提斯的代表作,也 是一部脍炙人口的世界名著,是欧洲长篇小说发展史上的一 座里程碑。

本书一方面针碰时弊,掲露批判社会的丑恶现象,一方面赞扬除暴安良、惩恶扬善、扶贫济弱等优良品德,所有这些,都是人类共同的情感,它可以穿越时空,对每个时代、毎个民族都具有永恒的价值,在相隔四个世纪之后,仍感动着每一个读者。

现代主义文学的开山祖师——《变形记》

卡夫卡是现代主义文学的开山祖师,《变形记》是他的代 表作品之一。如果你想了解现代主义文学,最好的办法就是从反复阅读《变形记》开始。

在本书中卡夫卡描述了小职员格里髙尔-萨姆沙突然变成一只使家人都厌恶的大甲虫的荒诞情节,借以掲示人与人之间——包括伦常之间——表面上亲亲热热,内心里却极为孤独和陌生的实质,生动面深刻地再现了资本主义社会中人与人之间的冷漠。

在荒诞的、不合逻辑的世界里描绘“人类生活的一切活动及其逼真的细节”,这正是著名小说家卡夫卡的天赋之所在。


东方圣人之作——《吉檀迦利》

1913年的诺员尔文学奖评奖会上,一部诗集成为评委们 争相阅读的作品,委员会以12:1的投票比例将当年的诺贝尔奖颁给了这部诗集的作者,这也是瑞典文学院第一次将诺贝尔奖颁给一个东方人。

大部分读过这部名叫《吉檀迦利》的诗集的人他们对这次授奖感到非常满意,他们将诗集的作者称为“东方圣人”,这个人就是泰戈尔。

人间喜剧”的杰出代表——《欧也妮·葛朗台》

《欧也妮·葛朗台》是欧洲批判现实主义文学的奠基人和杰出代表一巴尔扎克创作的《人间喜剧》中的一部杰出 作品。

故事是在家庭内部日常生活中展开的,没有耸人听闻的事件,没有丝毫传奇色彩,正如作者本人所说,这是一出 “没有毒药,没有尖刀,没有流血的平凡悲剧”,而其惨烈的程度却不亚于古典悲剧。

德国文学中的奥林匹斯神——歌德

1749年8月28日,约翰-歌徳出生于德国商业城市法 兰克福一个富裕的市民家庭。

歌徳以戏剧的形式创作了一部具有德意志民族内容的作品,让一个勇敢人的形象留在了人们的记忆中,这就是《葛兹》。

1774年,歌德写了第一部闻名世界的小说《少年维特之烦恼》,歌德在这里记述了一个叛逆者突破时代一切束缚的必然的生活感情经历。它使逬歩的年轻知识分于受到了很大的鼓舞。

他认为:艺术应当挖掘人的内心世界,从那里去寻找美、 善和真正的理想。

歌德用毕业精力写完的《浮士德》反映了文艺复兴后直到十九世纪初德国和欧洲的历史,描写了由封建社会向资本主义过渡的发展过程。他笔下的浮士德一心向往光明,追求真理,浮士德代表新兴、进步的力量,他正在一歩步走向胜利。

英国天才诗人——拜伦

1788年1月22日,这位天才诗人出生于英国伦敦一个没落的贵族家庭。

在雪莱的支持下,他创作他一生中最重要的作品 《唐强》,它是一部诗体长篇小说,诗人通过主人公的爱情和生活中的一些遭遇反映了整个欧洲的历史。

歌德评价它是彻底的天才作品,愤世到了不顾一切的辛辣程度,温柔到了最纤细动人的地步。

俄国文学之父——普希金

1799年6月6日,普希金诞生在莫斯科一个家道中落的贵族世家。

普希金没有像沙皇所希望的那样成为一个顺应政府的宫廷诗人。

他陆续发表了《毒树》、《寄西伯利亚囚徒》、 《阿利昂》等诗篇,对政府的专制进行了猛烈的攻击和辛辣的嘲讽,并宣传了革命理想,之后他又写了英雄史诗《波尔塔瓦》、特写集《网尔絃鲁姆旅行记》、长篇诗体小说《叶甫根尼 ・奥涅金》和长篇小说《匕尉的女儿》等等由于普希金不断地针贬时弊,抨击沙皇的专制、贵族阶层的利己主义和追逐虚荣的腐朽道徳观,他与上层社会的矛盾越来越尖锐.沙皇也不断寻找各种机会对普希金以迫害。

普希金被杀时年仅37岁,正值艺术大有作为的盛年。

童话大王——安徒生

1805年4月2日,安徒生出生于丹麦一个叫奥登塞的小 城镇里。

童话是安徒生的主要创作。他所描写的大都是虚构出来的情节,主人公也多是一些动物、玩具,但是从这些假人假事里可以清楚地找到真人真事的影子。

他用童话征服了全世界孩子们的心。安徒生所写的《丑小鸭》、《卖火柴的小女孩》、《美人鱼》、《皇帝的新装》、《豌豆公主》等等,每一个童话,一经出版,便得到世界各国孩子们的喜爱。

安徒生对穷苦人民极为同情、热爱,对统治阶级极端憎恶、鄙视。在他的笔下, 穷苦人都是善良、勤劳、聪明的,相反地,贵族、地主,甚至皇帝,倒都是些愚蠢无能的废物。

挪威民族戏剧之父——易卜生

易卜生在世界戏剧史上享有同莎士比亚和莫里哀一样不朽的声誉。

1828年3月20日,亨得•易卜生出生于挪威东南海岸 斯基恩城的一个富裕木材商人家庭。

易卜生先后写岀了《培尔•金待》、《社会支柱》、《玩偶之家》、《群鬼》、《人民公敌》等剧本,其中的《玩偶之家》的发表,更是使 易卜生的大名远扬、成为世界上知名的戏剧家之一。

剧本的 女主人公娜拉是位美丽活泼的女子,从小父亲就把她当作一 个好玩的玩具。结婚之后,丈夫海尔茂又把妻子当作自己的私有财产,不愿她有自己的思想和独立的人格。

她在一系列的事实面前,終于看透了丈夫极端利己主义的卑鄙灵魂,认识到所谓的社会道德和法律都是虚伪的。经过剧烈的思想斗争,她终于决定 离开这个“玩偶之家”。

美国幽默文学大师—马克·吐温

马克•吐温原名叫塞缪尔•克莱门斯,1835年11月1 日岀生于美国密苏里卅佛罗里达镇。

著名的传记作家阿鲁巴多・卞曾在马克-吐温的传记中这样写道:“偶然得到的约翰传记中的一页纸,引起了马克 ・吐温对其生平的浓厚兴趣,对这种兴趣的热衷就是他一生智慧的标志,而且这种兴趣至死不改。从捡起那片废纸的那一刻起,他就走向了开创自己卓越智慧的路途。”

马克-吐温的一生写了许多广传于世的优秀小说,比如 《汤姆•索耶历险记》、《哈克贝利-努历险记》、《镀金时代》、《王子与贫儿》、《竞选州长》、《百万英镑》等等。

其中的 《百万英镑》被搬上银幕拍成电影,以诙谐幽默的手法,把资 本主义社会里金钱主宰一切的现象表现得淋漓尽致。

俄国现实主义作家——契词夫

1860年1月29日,安东·巴甫洛维奇·契诃夫生于俄国南部亚速海边的大网罗格的小镇。

1885年,他发表了小说《普利希别叶夫中士》,文中深刻地掲露了沙皇专制统治的野室及愚蠢,在读者中引起了很大的反响。接着又发表了《痛苦》、《变色龙》、《家庭教师》等短篇小说,其中《变色龙》被译成中文,而且还编人中国中学语文教材,得到广泛传播。

苏联文学的奠基人——高尔基

1868年3月28日,马克西姆,高尔基出生于俄国中部 诺夫戈罗德的一个木匠家庭。

1892年,高尔基发表了第一篇短篇小说《马卡尔·楚德 拉》。此后,他开始在俄国各种大型杂志上发表作品。他的 文学才华渐渐引起了国内外的广泛关注。

1901年,高尔基怀着满腔的革命热情,以高亢的浪漫主义的格调,写出了著名诗篇《海燕》。它成功塑造了象征大智大勇的革命 者——海燕的形象,并预言革命风暴即将到来,鼓舞人民去迎接伟大的战斗。这是一篇战斗的檄文,无产阶级革命的颂歌。

随后,他又创作了《底层》等揭示社会矛盾的几部重要戏剧作品,在当时俄国文坛引起轰动,受到革命人民的热烈欢迎。


人文主义的悲壮颂歌——《哈姆莱特》

完成于1601年的《哈姆莱特》,是文艺复兴时期的巨人——莎士比亚戏剧创作的最高成就。也是莎学研究的最大课题。

据联合国教科文组织的统计,《哈姆莱特》是当今世界上 最受欢迎的戏剧,它的剧本仅在1979 ~ 1985年间,就出版了 92版次。

女权图腾柱——《简·爱》

《简•爱》是英国19世纪著名的女作家夏洛蒂-勃朗特的代表作。

全书以其对于一位“灰姑娘式”人物奋斗史的感人刻画而取胜,是女性文学的代表作品,是全世界能阅读小说的妇女必读的经典之作,具有强烈的震撼心灵的艺术力量。

我国第一部被翻译过来的外国小说——《茶花女》

1848年,法国作家小仲马发表了他的成名作《茶花女》。 小说问世后引起了极大震动,迅速被译成各种文字在世界上广为流传,使得千千万万读者为这则红颜薄命、男女悲欢的故事一洒同情之泪。

在小说发表半个世纪之后的 1898年,由林纾将其译成中文题名 《巴黎茶花女遗事》,才为广大中国读者所知晓。

严复曾赞道:“可怜一卷茶花女,断尽支那荡子肠。”中国的小说家们 在《巴黎茶花女遗事》直接或间接的影响或摹仿之下,写出了不少新意义、新结构的爱情小说。

神圣的史诗——《神曲》

《神曲》是意大利诗人但丁在被放逐期间写的一部长诗, 是诗人的代表作。诗人采用了中世纪流行的梦幻文学形式, 描写了一个幻游地狱、炼狱、天堂三界的故事。

《神曲》是一 部奇书,但丁因之而成为世界四大诗人之一。

现实生活中, 人们对它却是敬而远之,原因在于大量象征和比喻的运用,以及典故的层出不穷。有人断言,没有人能读懂《神曲》。

精神分析学的奠基石——《梦的解析》

梦是什么?人为什么会做梦?为什么会做种种稀奇古 怪的梦?梦有什么作用?梦的原动力何在?……

奥地利精神病医生、著名的心理学家弗洛伊德,根据多年的临床经验和调査分析,写成了《梦的解析》一书,以几百个有趣的梦例试图科学地解开梦的奥秘,发掘出人性的"真正主宰-—潜意识,并为他的精神分析学说奠定理论基础。

在《梦的解析》中,弗洛伊德又将人类精神活动分为本能 冲动、自我、超自我三个部分。其中本能冲动最重要,而性欲则是一切欲望和冲动的根本,全人类在文化(包括艺术、法 律、宗教等)上的成就,都是性欲本能发展的结果。

当“本能 冲动”、“自我”、“超自我”三者处于合理的和谐状态时,个人 的精神状态就得到良好的调整,人就心情愉快。

哀绝的美——《雪国》

川端康成的《雪国》是其获得诺贝尔文学奖的三部代表作之一,全书不足8万字,与许多中外名著相比,也许算不上鸿篇巨制,但这本书在日本却真正是家喻户晓。

哀绝的美,在川端康成作品中体现得淋漓尽致。《雪国》挖掘到了川端这个作家可以将自己优秀的资质作为不朽的作品留给后世的矿脉。

意识流小说的经典作品——《哗与骚动》

人们谈论意识流小说,就不能不谈他的《喧哗与骚动》, 谈论福克纳虚构的著名的“约克纳帕塔法世系”,就无法回避 《喧哗与騒动》。

该书以“意识流”的手法通过一个旧家庭的分崩离析和趋于死亡,真实地呈现了美国南方历史性变化,南方正如康普生家庭一样分崩离析,走向死亡。

《喧哗与骚动》发表之后,赢得了评论界的极大褒扬。 1949年福克纳因之获得诺贝尔文学奖。虽然这部经典的意识流作品读起来较为晦涩,结构夏杂,寓意较深,是对读者耐心的较大考验,但其繁复的小说结构和多变的叙述手法让人惊叹,具有无与伦比的艺术魅力。

人类最美好的感情复活——《复活》

《复活》是俄国著名作家托尔斯泰的代表作。

相信有很多人在学生时代就曾阅读过这本书。在我国自20世纪初至今已出版过6种译本,三四十年代,先后有戏剧家田汉和夏衍改编的同名剧本发表和上演,作品和它的主人公已成为我国读者和观众极为熟悉和喜爱的人物形象。

卓越的社会哲理小说—《罪与罚》

陀思妥耶夫斯基是俄国著名的批判现实主义作家,《罪 与罚》是他的一部卓越的社会哲理小说,它的发表标志着他 艺术风格的成熟。

小说成功地反映农奴制改革后,资本主义的发展在俄国生活的各个方面,探讨了贫穷与犯罪等社会哲理问题,但小说也暴露了作者世界观的全部矛盾。

小说一发表,立即引起强烈的反响,使作者获得世界声誉。

审视人类的灵魂——《生命中不能承受之轻》

米兰・昆德拉在本书中以其独特的生命视角、冷静且蕴涵某种智慧的思虑,审视了人类灵魂的空虚与充盈、灵肉与轻重,诠释了生命之中某种不曾泯灭的真理。

在米兰・昆德拉看来,人生是痛苦的,这种痛苦源于我们对生活目的的错误把握。虽然世界上有许多人,每个人都在按着各自的生活目标而努力,但每个目的却都有着其本身的空虚,求名者无非镜花水月,求财者无非身外之物。

(限于文章长度,后50部下一篇文章分享,关注铁眼书吧,不迷路!)


随着人们对健康的日益关注,养生茶作为一种健康饮品,逐渐受到了广大消费者的喜爱。养生茶不仅口感独特,而且具有一定的保健作用。本文将为您介绍一些常见的养生茶搭配及其功效和作用,帮助您更好地了解如何选择和搭配适合自己的养生茶。

一、绿茶+柠檬


绿茶富含茶多酚和儿茶素等抗氧化物质,有助于清除体内的自由基,减轻氧化应激反应。柠檬含有丰富的维生素C,具有美白养颜、提高免疫力的功效。将绿茶与柠檬搭配饮用,不仅口感清新,还能起到提神醒脑、抗氧化、美白养颜的作用。

二、红茶+生姜

红茶含有丰富的茶多酚和咖啡因等成分,具有提神醒脑、暖胃消食的作用。生姜具有驱寒暖身、温中止呕的功效,对于胃寒、胃痛、呕吐等症状有一定的缓解作用。将红茶与生姜搭配饮用,可以起到暖胃消食、驱寒暖身的作用,尤其适合冬季饮用。

三、菊花+枸杞

菊花具有疏散风热、清肝明目的作用,对于目赤肿痛、风热感冒等症状有一定的缓解作用。枸杞含有丰富的胡萝卜素、维生素C等营养成分,具有养肝明目、补肾益精的功效。将菊花与枸杞搭配饮用,可以起到清肝明目、养肝补肾的作用,尤其适合长时间使用电脑的上班族。


四、玫瑰花+红枣

玫瑰花具有疏肝解郁、活血化瘀的作用,对于肝气郁结、胸胁胀痛等症状有一定的缓解作用。红枣含有丰富的维生素、矿物质等营养成分,具有补中益气、养血安神的功效。将玫瑰花与红枣搭配饮用,可以起到疏肝解郁、养血安神的作用,尤其适合女性朋友们饮用。

五、决明子+山楂

决明子具有清热明目、润肠通便的作用,对于目赤肿痛、大便秘结等症状有一定的缓解作用。山楂含有丰富的维生素C、黄酮类物质等营养成分,具有消食化积、活血化瘀的功效。将决明子与山楂搭配饮用,可以起到清热明目、消食化积的作用,尤其适合消化不良、便秘的人群。

六、荷叶+冬瓜

荷叶具有清热解暑、利尿消肿的作用,对于暑热烦渴、水肿等症状有一定的缓解作用。冬瓜含有丰富的维生素、矿物质等营养成分,具有利尿消肿、清热解毒的功效。将荷叶与冬瓜搭配饮用,可以起到清热解暑、利尿消肿的作用,尤其适合夏季饮用。


七、金银花+连翘

金银花具有清热解毒、凉血消肿的作用,对于风热感冒、咽喉肿痛等症状有一定的缓解作用。连翘具有清热解毒、散结消肿的功效。将金银花与连翘搭配饮用,可以起到清热解毒、散结消肿的作用,尤其适合风热感冒、咽喉肿痛等症状的人群。

总之,养生茶搭配大全中的每一种搭配都有其独特的功效和作用。在选择养生茶时,可以根据自己的身体状况和口味偏好来搭配适合自己的养生茶。同时,也要注意适量饮用,避免过量造成身体不适。通过合理搭配和饮用养生茶,我们可以更好地保养身体、提高健康水平。


单点登录是目前比较流行的企业业务整合的解决方案之一。单点登录是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。例如:百度旗下有很多的产品,比如百度贴吧、百度知道、百度文库等,只要登录百度账号,在任何一个地方都是已登录状态,不需要重新登录。


单点登录是互联网应用和企业级平台中的基础组件服务。接下来就介绍单点登录的原理,并基于SpringBoot +JWT实现单点登录解决方案。

一、什么是单点登录?

单点登录(Single Sign On 简称 SSO)是一种统一认证和授权机制,指在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统,不再需要重新登录验证。

单点登录一般是用于互相授信的系统,实现单一位置登录,其他信任的应用直接免登录的方式。在多个应用系统中,只需要登录一次,就可以访问其他相互信任的应用系统。

单点登录是互联网应用和企业级平台中的基础组件服务。比如百度贴吧、百度知道、百度文库等,只要登录百度账号,在任何一个地方都是已登录状态,不需要重新登录。此外,第三方授权登录,如在京东中使用微信登录。解决信息孤岛和用户不对等的实现方案。

随着时代的演进,大型web系统早已从单体应用架构发展为如今的多系统分布式应用群。但无论系统内部多么复杂,对用户而言,都是一个统一的整体,访问web系统的整个应用群要和访问单个系统一样,登录/注销只要一次就够了,不可能让一个用户在每个业务系统上都进行一次登录验证操作,这时就需要独立出一个单独的认证系统,它就是单点登录系统。

二、单点登录的优点和不足

单点登录解决了用户只需要登录一次就可以访问所有相互信任的应用系统,而不用重复登录。除此之外,还有以下优点:

1)提高用户的效率。用户不再被多次登录困扰,也不需要记住多个 ID 和密码。另外,用户忘记密码并求助于支持人员的情况也会减少。

2)提高开发人员的效率。SSO 为开发人员提供了一个通用的身份验证框架。实际上,如果 SSO 机制是独立的,那么开发人员就完全不需要为身份验证操心。他们可以假设,只要对应用程序的请求附带一个用户名,身份验证就已经完成了。

3)简化管理。如果应用程序加入了单点登录协议,管理用户账户的负担就会减轻。简化的程度取决于应用程序,因为 SSO 只处理身份验证。所以,应用程序可能仍然需要设置用户的属性(比如访问特权)。

三、单点登录实现机制

单点登录听起来很复杂,实际上架构非常简单,具体如下图所示:

如上图所示,当用户第一次访问应用系统A时,因为还没有登录,会被跳转到认证系统进行登录;认证系统根据用户提供的登录信息进行身份校验,如果通过,则返回给用户一个认证凭据(ticket);用户访问其他应用系统时,将会带上此ticket作为自己认证的凭据,应用系统B接受到请求之后会把ticket送到认证系统进行校验,检查ticket的合法性。如果通过,则成功登录应用系统B。

四、单点登录常见的解决方案

实现单点登录的方式有很多种,常见的有基于Cookie、Session共享、Token机制、JWT机制等方式。

4.1 基于Cookie

基于Cookie是最简单的单点登录实现方式是使用cookie作为媒介存放用户凭证。用户登录成功后,返回一个加密的cookie,当用户访问其他应用时,携带此cookie,授权应用解密cookie并进行校验,校验通过则登录当前用户。

当然,我们不难发现以上方式将信任数据存储在客户端的Cookie中,这种方式存在两个问题:

1、Cookie不安全,CSRF(跨站请求伪造);

2、Cookie不能跨域,无法解决跨域系统的问题。

对于第一个问题,通过加密Cookie可以保证安全性,当然这是在源代码不泄露的前提下。如果Cookie的加密算法泄露,攻击者通过伪造Cookie则可以伪造特定用户身份,这是很危险的。

对于第二个问题,不能跨域是Cookie的硬伤。可以将生成ticket作为参数传递到其他应用系统。这样可以避免跨域问题。

4.2 基于Session共享

所谓基于Session共享,主要是将Session会话信息保存到公共的平台,如Redis数据库等,各应用系统共用一个会话状态sessionId,实现登录信息的共享,从而实现单点登录。

基于Session解决了Cookie不能跨域的问题,但也存在其他问题。早期的单体应用使用Session实现单点登录,但现在大部分情况下都需要集群,由于存在多台服务器,Session在多台服务器之间是不共享的,因此,还需解决Session共享的问题

解决系统之间的 Session 不共享问题有以下几种方案:

1)Tomcat集群Session全局复制【会影响集群的性能呢,不建议】

2)分布式Session,即把Session数据放在Redis中(使用Redis模拟Session)【建议】

4.3 Token机制

其实,Token就是一串加密(使用MD5,等不可逆加密算法)的字符串。具体流程如下:

1.客户端使用用户名跟密码请求登录,

2.服务端收到请求,去验证用户名与密码,

3.验证成功后,服务端会签发一个加密的字符串(Token)保存到(Session,Redis,Mysql)中,并把这个Token发送给客户端,

4.客户端收到Token后存储在本地,如:Cookie 或 Local Storage 中,

5.客户端每次向服务端请求资源的时候需要带着服务端签发的 Token,

6.服务端收到请求,验证客户端请求中携带Token和服务器中保存的Token进行对比效验, 如果验证成功,就向客户端返回请求的数据。

使用Token验证的优势:

  • 无状态、可扩展;

  • 在客户端存储的Token是无状态的,并且可扩展。基于这种无状态和不存储Session信息,负载负载均衡器能够将用户信息从一个服务传到其他服务器上;

  • 安全性,请求资源时发送token而不再是发送cookie能够防止CSRF(跨站请求伪造)

即使在客户端使用cookie存储token,cookie也仅仅是一个存储机制而不是用于认证。不将信息存储在Session中,让我们少了对session操作。

4.4 JWT 机制

JWT(JSON Web Token的缩写)它将用户信息加密到token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证JWTToken的正确性,只要正确即通过验证。

4.4.1 JWT的特点
  • 紧凑:数据小,可以通过URL,POST参数,请求头发送。且数据小代表传输速度快。

  • 自包含:使用payload数据块记录用户必要且不隐私的数据,可以有效减少数据库访问次数,提高代码性能。

  • JWT一般用于处理用户身份验证或数据信息交换。

  • 用户身份验证:一旦用户登录,每个后续请求都将包含JWT,允许用户访问该令牌允许的路由,服务和资源。单点登录是当今广泛使用JWT的一项功能,因为它的开销很小,并且能够轻松地跨不同域使用。

  • 数据信息交换:JWT是一种非常方便的多方传递数据的载体,因为其可以使用数据之前确保数据的有效性和安全性。

4.4.2 JWT数据结构

JWT的结构包含三个部分:Header头部,Payload负载和Signature签名。三部分之间用“.”号做分割。校验也是JWT内部自己实现的 ,并且可以将你存储时候的信息从token中取出来无须查库。

  • header

数据结构:{“alg”: “加密算法名称”, “typ” : “JWT”}

alg是加密算法定义内容,如:HMAC SHA256 或 RSA

typ是token类型,这里固定为JWT。

  • payload

在payload数据块中一般用于记录实体(通常为用户信息)或其他数据的。主要分为三个部分,分别是:已注册信息(registered claims),公开数据(public claims),私有数据(private claims)。

payload中常用信息有:iss(发行者),exp(到期时间),sub(主题),aud(受众)等。前面列举的都是已注册信息。

公开数据部分一般都会在JWT注册表中增加定义。避免和已注册信息冲突。

公开数据和私有数据可以由程序员任意定义。

注意:即使JWT有签名加密机制,但是payload内容都是明文记录,除非记录的是加密数据,否则不排除泄露隐私数据的可能。不推荐在payload中记录任何敏感数据。

  • Signature

签名信息。这是一个由开发者提供的信息。是服务器验证的传递的数据是否有效安全的标准。在生成JWT最终数据前,先使用header中定义的加密算法,将header和payload进行加密,并使用点进行连接。如:加密后的head.加密后的payload。再使用相同的加密算法,对加密后的数据和签名信息进行加密。得到最终结果。

4.4.3 JWT执行流程

JWT的请求流程也特别简单,首先使用账号登录获取Token,然后后面的各种请求,都带上这个Token即可。具体流程如下:

1. 客户端发起登录请求,传入账号密码;

2. 服务端使用私钥创建一个Token;

3. 服务器返回Token给客户端;

4. 客户端向服务端发送请求,在请求头中携带Token;

5. 服务器验证该Token;

6. 返回结果。

可能有些小伙伴会觉得,Token 和JWT有什么区别呢?其实Token和JWT确实比较类似,只不过,Token需要查库验证token 是否有效,而JWT不用查库,直接在服务端进行校验,因为用户的信息及加密信息,和过期时间,都在JWT里,只要在服务端进行校验就行,并且校验也是JWT自己实现的。

五、基于JWT机制的单点登录

JWT提供了基于Java组件:java-jwt帮助我们在Spring Boot项目中快速集成JWT,接下来进行SpringBoot和JWT的集成。接下来我们通过项目示例,演示如何基于SpringBoot+JWT实现单点登录。

5.1 项目结构

项目结构如下图所示:

如上图所示,weiz-sso为认证系统,weiz-app-a和weiz-app-b为两个独立的应用系统。

5.2 创建认证系统

5.2.1.创建项目并引入JWT等依赖

首先,创建普通的Spring Boot项目weiz-sso,修改项目中的pom.xml文件,引入JWT等依赖。示例代码如下:

代码语言:javascript

复制

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId></dependency><dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <exclusions>
        <exclusion>
            <groupId>io.lettuce</groupId>
            <artifactId>lettuce-core</artifactId>
        </exclusion>
    </exclusions></dependency><!-- SpringBoot集成thymeleaf模板 --><dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId></dependency><dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId></dependency><dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.83</version></dependency><dependency>
    <groupId>com.auth0</groupId>
    <artifactId>java-jwt</artifactId>
    <version>3.10.3</version></dependency>

代码语言:javascript

复制


5.2.2.创建&验证JWT工具类

创建通用的处理类TokenUtil,负责创建和验证Token。示例代码如下:

代码语言:javascript

复制

/**
 * 类功能简述:
 * 类功能详述:
 *
 * @author weiz
 */public class JwtUtil {

    /**
     * Description: 生成一个jwt字符串
     *
     * @param name    用户名
     * @param secret  秘钥
     * @param timeOut 超时时间(单位s)
     * @return java.lang.String
     * @author weiz
     */
    public static String encode(String name, String secret, long timeOut) {
        Algorithm algorithm = Algorithm.HMAC256(secret);
        String token = JWT.create()
                //设置过期时间为一个小时
                .withExpiresAt(new Date(System.currentTimeMillis() + timeOut))
                //设置负载
                .withClaim("name", name)
                .sign(algorithm);
        return token;
    }

    /**
     * Description: 解密jwt
     *
     * @param token  token
     * @param secret secret
     * @return java.util.Map<java.lang.String                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               ,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               com.auth0.jwt.interfaces.Claim>
     * @author weiz
     */
    public static Map<String, Claim> decode(String token, String secret) {
        if (token == null || token.length() == 0) {
            throw new CustomException("token为空:" + token);
        }
        Algorithm algorithm = Algorithm.HMAC256(secret);
        JWTVerifier jwtVerifier = JWT.require(algorithm).build();
        DecodedJWT decodedJWT = jwtVerifier.verify(token);
        return decodedJWT.getClaims();
    }}

代码语言:javascript

复制


5.2.3 登录功能

接下来创建AuthController控制器,实现登录,退出等请求接口,示例代码如下:

代码语言:javascript

复制

/**
 * 类功能简述:
 * 类功能详述:
 *
 * @author weiz
 */@Controller
@RequestMapping("/sso")public class AuthController {

    private JwtService service;

    @Autowired    public AuthController(JwtService service) {
        this.service = service;
    }

    @RequestMapping({"/","/index"})
    public String index(){
        return "index";
    }

    @RequestMapping("/login")
    public String login(){
        return "login";
    }

    @RequestMapping(value = "/login",method = RequestMethod.POST)
    @ResponseBody    public ReturnResult login(@RequestBody User user) {
        String token = service.login(user);
        return ReturnResult.successResult(token);
    }

    @RequestMapping("/checkJwt")
    @ResponseBody    public ReturnResult checkJwt(String token) {
        return ReturnResult.successResult(service.checkJwt(token));
    }

    @RequestMapping("/refreshJwt")
    @ResponseBody    public ReturnResult refreshJwt(String token){
        return ReturnResult.successResult(service.refreshJwt(token));
    }

    @RequestMapping("/inValid")
    @ResponseBody    public ReturnResult inValid(String token) {
        service.inValid(token);
        return ReturnResult.successResult(null);
    }}

代码语言:javascript

复制


5.3 创建应用系统

5.3.1创建应用系统weiz-app-a和weiz-app-b

首先,分别创建两个Spring Boot项目weiz-app-a和weiz-app-b。并引入相关依赖,示例代码如下:

代码语言:javascript

复制

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- SpringBoot集成thymeleaf模板 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>3.14.9</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.83</version>
        </dependency>
5.3.2 登录验证拦截器

在两个项目中分别添加登录拦截器LoginFilter,负责拦截所有Http请求,验证Token是否有效。示例代码如下:

代码语言:javascript

复制

/**
 * 类功能简述:
 * 类功能详述:
 *
 * @author weiz
 */@Component
@WebFilter(urlPatterns = "/**", filterName = "loginFilter")public class LoginFilter implements Filter {

    private Logger logger = LoggerFactory.getLogger(this.getClass());

    @Value("${sso_server}")
    private String serverHost;

    @Override    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override    public void destroy() {

    }

    @Override    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
        String token = httpServletRequest.getParameter("token");
        if (this.check(token)) {
            filterChain.doFilter(servletRequest, servletResponse);
        } else {
            HttpServletResponse response = (HttpServletResponse) servletResponse;
            String redirect = serverHost + "/login?redirect=" + httpServletRequest.getRequestURL();
            //response.setContentType("application/json;charset=utf-8");
            //response.setCharacterEncoding("utf-8");
            //response.getWriter().write(JSON.toJSONString(new ReturnEntity(-1, "未登录", null)));
            response.sendRedirect(redirect);
        }
    }

    private boolean check(String jwt) {
        try {
            if (jwt == null || jwt.trim().length() == 0) {
                return false;
            }
            JSONObject object = HttpClient.get(serverHost + "/checkJwt?token=" + jwt);
            return object.getBoolean("data");
        } catch (Exception e) {
            logger.error("向认证中心请求失败", e);
            return false;
        }

    }}

代码语言:javascript

复制


5.3.3.创建控制器

在两个项目中分别创建IndexController控制器,处理HTTP请求。示例代码如下:

代码语言:javascript

复制

/**
 * 类功能简述:
 * 类功能详述:
 *
 * @author weiz
 */@Controllerpublic class IndexController {

    @Value("${sso_server}")
    private String serverHost;

    @RequestMapping({"/","/index"})
    public String index() {
        return "index";
    }

    @RequestMapping("/test")
    @ResponseBody    public ReturnEntity test() {
        return new ReturnEntity(1, "通过验证", null);
    }

    @RequestMapping("/logout")
    public void logout(HttpServletRequest request, HttpServletResponse response,String token) throws Exception {
        HttpClient.get(serverHost + "/inValid?token=" + token);
        String requestHost = request.getScheme() +"://"+ request.getServerName() + ":"+request.getServerPort() +"/";
        String redirect = serverHost + "/login?redirect=" + requestHost;
        System.out.println(redirect);
        response.sendRedirect(redirect);
    }}

代码语言:javascript

复制


5.4 测试验证

集成JWT成功之后,接下来验证单点登录系统是否成功,分别启动wei-sso、weiz-app-a和weiz-app-b。验证功能是否正常。

首先,在浏览器中访问应用系统A:http://localhost:8081/

如上图所示,由于没有登录,自动跳转到了单点登录系统进行登录验证。输入用户名、密码(admin\admin)登录成功并返回到应用系统A。

接下来,使用此token 访问应用系统B,在浏览器中输入:http://localhost:8082/?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiYWRtaW4iLCJleHAiOjE2NTc4MDA4MTB9.7NLXFJwGKxgnEwBsE25OredrpLIaanAoqeHXSZjO6QA

如上图所示,通过之前的token,无需登录即可成功进入了应用系统B。说明我们的单点登录系统搭建成功。

总结

以上,我们就把单点登录(SSO)的所有流程都介绍完了,原理大家都清楚了。单点登录是互联网应用和企业级平台中的基础组件服务,希望大家能明白其中的原理,熟练掌握。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。

原始发表:2022/07/15 18:43:43,如有侵权请联系 cloudcommunity@tencent.com 删除


高级互联网专家2023-03-31 11:41广东

单点登录(Single Sign-On,简称 SSO)是指用户只需要登录一次,即可在多个应用系统中访问受授权的资源。其原理是在用户登录之后,服务器会颁发一个令牌(Token),并将该令牌保存在共享的存储中(例如 Redis、数据库等),然后在用户访问其他应用系统时,该系统会向认证服务器发送请求,如果该用户已经登录过,则认证服务器会颁发一个新的令牌,否则需要用户重新登录。

下面简单介绍一下单点登录的实现方法:

1、Cookie + Session:采用 Cookie + Session 方式实现 SSO,其原理是在用户登录之后,认证服务器将用户信息存储在 Session 中,并生成一个 Session ID,然后将该 Session ID 存储在 Cookie 中,并返回给用户。用户在访问其他应用系统时,该系统会向认证服务器发送请求,并带上 Cookie 中的 Session ID。认证服务器通过 Session ID 来判断该用户是否已经登录过,如果已经登录过,则返回一个新的 Session ID 给应用系统,否则需要用户重新登录。

2、Token:采用 Token 方式实现 SSO,其原理是在用户登录之后,认证服务器生成一个 Token,并将该 Token 存储在共享的存储中(例如 Redis、数据库等),然后将该 Token 返回给用户。用户在访问其他应用系统时,该系统会向认证服务器发送请求,并带上 Token。认证服务器通过 Token 来判断该用户是否已经登录过,如果已经登录过,则返回一个新的 Token 给应用系统,否则需要用户重新登录。

下面简单介绍一下基于 Cookie + Session 的单点登录实现方法:

1、用户访问应用系统 A,该系统发现用户未登录,则重定向到认证服务器登录页面。

2、用户输入用户名和密码,认证服务器验证成功后,在 Session 中保存用户信息,并生成一个 Session ID,然后将该 Session ID 存储在 Cookie 中,并返回给应用系统 A

3、用户访问应用系统 B,该系统发现用户未登录,则重定向到认证服务器的一个地址,该地址需要带上一个回调地址参数(即应用系统 B 的地址)。

4、认证服务器检查 Cookie 中是否存在 Session ID,如果存在,则表示该用户已经登录过,生成一个新的 Session ID,将用户信息保存在 Session 中,并将新的 Session ID 返回给应用系统 B

5、应用系统 B 收到新的 Session ID 后,可以通过该 Session ID 获取用户信息,然后完成用户的登录。

以上是一个简单的基于 Cookie + Session 的单点登录实现方法,实际实现中还需要考虑一些安全性和可扩展性的问题。


        软件开发领域,语言本身在各自领域都有适用场景,有许多流行的编程语言可供选择,每种语言都有其独特的特点和适用场景。 Java、C、C++、Go 和 Python 这五种主流编程语言,从底层实现、效率、原理、国内外市场占有率、社区活跃度以及开源项目等方面进行分析比较。


1. Java语言

底层实现: Java 是一种跨平台的面向对象编程语言,通过 JVM(Java 虚拟机)实现跨平台性。

效率: Java 的执行效率相对较低,但在大型企业应用和Web开发中得到广泛应用。

原理特性: Java 基于类和对象的面向对象编程范式,具有自动内存管理和垃圾回收机制。

学习成本: 中等。Java 的语法相对简单,但面向对象的概念需要时间理解。

市场占有率: Java 在企业级应用和Android开发领域市场占有率高。

社区活跃度: Java 拥有庞大的开发者社区和丰富的资源支持。

开源项目: Spring Framework、Apache Struts 等。

企业级应用开发: Java 在企业级应用开发中得到广泛应用,尤其在大型系统和企业级软件开发中具有优势。

Android 开发: 作为 Android 应用的主要开发语言,Java 在移动应用领域占有重要地位。

大型网络应用: 由于其稳定性和安全性,Java 适用于开发大型网络应用和分布式系统。

2. C语言

底层实现: C 是一种面向过程的编程语言,直接编译成机器码运行,具有高效的性能。

效率: C 是高效的系统编程语言,适合开发操作系统和嵌入式系统等领域。

原理特性: C 语言简洁高效,需要手动管理内存。

学习成本: 较高。C 的指针等概念对初学者来说可能较难理解。

市场占有率: C 在系统编程领域占有重要地位。

社区活跃度: C 语言虽然古老但仍有庞大的开发者社区支持。

开源项目: Linux 内核、MySQL 等。

系统编程: C 语言适合用于操作系统、嵌入式系统等底层开发,因为它直接编译成机器码并具有高效的性能。

硬件驱动程序开发: 由于 C 语言可以直接访问内存和硬件,因此适合编写硬件驱动程序。

3. C++语言

底层实现: C++ 继承了 C 语言的特性,支持面向对象编程和泛型编程。

效率: C++ 是高效的系统编程语言,适合开发复杂系统和游戏引擎。

原理特性: C++ 支持多重继承和运算符重载等特性。

学习成本: 高。C++ 涉及更多的概念和特性,学习曲线较陡峭。

市场占有率: C++ 在游戏开发、系统软件等领域有着广泛应用。

社区活跃度: C++ 社区活跃度高,有许多优秀的开源项目和框架。

开源项目: Boost、Qt 等。

游戏开发: 由于其高性能和丰富的特性,C++ 在游戏开发领域具有显著优势。

系统软件开发: C++ 适用于开发复杂的系统软件,如操作系统、数据库系统等。

4. Go语言

底层实现: Go 是一种静态类型、编译型的编程语言,具有高效的并发编程特性。

效率: Go 具有高效的编译速度和并发处理能力,适合云服务、网络编程等领域。

原理特性: Go 简洁易学,支持轻量级线程和通道等特性。

学习成本: 中等。Go 的语法相对简单,适合初学者入门。

市场占有率: Go 在云计算和大数据领域逐渐增长。

社区活跃度: Go 社区规模虽小但活跃度高。

开源项目: Docker、Kubernetes 等。

并发编程: Go 语言的轻量级线程(goroutine)和通道(channel)特性使其非常适合处理并发编程任务,因此在构建高并发系统时很受欢迎。

云计算: 由于其简洁性和高效性,Go 在云计算领域得到广泛应用,特别是与 Docker 和 Kubernetes 等相关的项目中。

5. Python语言

底层实现: Python 是一种解释型语言,易读易写。

效率: Python 执行速度相对较慢,适合快速原型开发和数据科学领域。

原理特性: Python 支持面向对象、函数式编程,拥有丰富的第三方库。

学习成本: 低。Python 的语法简洁清晰,适合初学者。

市场占有率: Python 在人工智能、数据分析等领域广泛应用。

社区活跃度: Python 拥有庞大的社区和活跃的开发者社群。

开源项目: Django、Flask 等。

Web 开发: Python 在 Web 开发中应用广泛,特别是在快速原型开发和初创企业中。

数据科学和人工智能: Python 成为了数据科学、机器学习和人工智能的主流编程语言,由于其丰富的科学计算库和易用性。

自动化脚本和工具: Python 适合编写自动化脚本和各种实用工具,因为其语法简洁清晰。

6.企业级开发

Java:

开发框架: Spring Framework

代码示例:

// Spring MVC 控制器示例

@RestController

public class HelloController {

    @RequestMapping("/hello")

    public String hello() {

        return "Hello, World!";

    }

}

C++:

开发框架: Qt

代码示例:

#include <iostream> 

int main() { std::cout << "Hello, World!" << std::endl; return 0; }

Python:

开发框架: Django,flask

代码示例:

from flask import Flask

 

# 创建 Flask 应用实例

app = Flask(__name__)

 

# 定义路由和视图函数

@app.route('/')

def hello_world():

    return 'Hello, World! This is a basic Flask application.'

 

# 运行应用

if __name__ == '__main__':

    app.run(debug=True)

Go:

开发框架: Spring Boot(适用于 Go 的 Spring 框架)

代码示例:

// Gin 框架路由示例

func main() {

    router := gin.Default()

    

    router.GET("/hello", func(c *gin.Context) {

        c.String(http.StatusOK, "Hello, World!")

    })

    

    router.Run(":8080")

}

7. 桌面开发

Java:

开发框架: JavaFX

C++:

开发框架: Qt

Python:

开发框架: Tkinter 或 PyQt

Go:

开发框架: Go-GTK 或 Walk

8. 客户端服务器(CS)开发

Java:

开发框架: Spring Boot

C++:

开发框架: POCO C++ Libraries

Python:

开发框架: Flask

Go:

开发框架: Gin

9. 前后端分离

在前后端分离开发中,常见的前端开发框架包括:


Angular

React

Vue.js

而后端开发使用的框架则可以是:


Java: Spring Boot

C++: 使用较少于其他语言,一般可选择 Web 框架进行开发

Python: Django、Flask

Go: Gin

10.语言优势

大数据领域:

Java: Java 在大数据领域有着广泛的应用,特别是在 Hadoop、Spark 等大数据处理框架中。由于 Java 的稳定性和可扩展性,它仍然是企业级大数据应用的首选语言之一。

C++: 虽然 C++ 在大数据领域的应用相对较少,但在一些高性能计算和底层系统开发方面仍然有其优势。比如,一些高性能的数据库和数据处理引擎可能会选择 C++ 进行开发。

Python: Python 在大数据领域的应用日益增多,特别是在数据分析、机器学习和人工智能领域。诸如 Pandas、NumPy、SciPy、TensorFlow 等库使得 Python 成为大数据处理和分析的热门选择。

Go: Go 也在大数据领域崭露头角,尤其是在一些分布式系统和云原生应用方面。Go 的并发性和性能使得它在大规模数据处理和分布式系统开发中具有潜力。

人工智能领域:

Java: Java 在人工智能领域并不是主流选择,但在一些企业级 AI 应用中仍有一定的用武之地,尤其是在与大型企业系统集成时。

C++: C++ 在游戏开发、计算机视觉和嵌入式系统等领域有着重要地位,因此在人工智能领域也有较广泛的应用,比如 OpenCV 等库的开发。

Python: Python 在人工智能和机器学习领域处于领先地位,因为它拥有丰富的库和框架,如 TensorFlow、PyTorch、Keras 等,以及简洁易读的语法。

Go: Go 在人工智能领域的应用还相对较少,但随着其在性能和并发性方面的优势逐渐被认识到,未来可能在一些领域找到应用机会。

————————————————


                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

                        

原文链接:https://blog.csdn.net/wnm23/article/details/137127781