修改spring-boot默认配置文件名

Spring-Boot默认的配置文件名为 application.properties;

在部署运行时spring-boot 支持 war部署与 jar 部署

在jar 部署时,可通过参数

--spring.config.location

指定具体的配置文件如,示例如下:

java  -jar AAA.war --spring.config.location=classes/aaa.properties

但在war部署时要修改配置文件名,就需要通过JAVA_OPTS 配置 -Dspring.config.location=xxx.properties 来修改默认配置文件,
示例如下:

JAVA_OPTS=-server -Dspring.config.location=xxx.properties

参考
https://stackoverflow.com/questions/32189144/spring-boot-set-location-of-application-properties-in-war-file

转:「连接未来」

身份

身份定义个人。

我们来想象一下,如果有一天早上起来,突然发现自己的「身份」完全无法确定了,或者说我的「身份安全」出现了问题,会发生什么。

一早我手机上的闹钟把我叫醒,但设备上指纹解锁的功能突然失效,手机解锁不了。我带着响个不停的手机出门,打开摩拜单车扫码,蚂蚁信用告知我的信用已经归零,交了押金,骑车到了银行来办理房屋贷款手续。银行查不到任何我的征信记录、收入记录或者社保记录,拒贷。走出了银行,手机发出了持续震动,无数条信用卡消费提醒弹了出来,消费地点有巴西、印度、尼泊尔等等,金额巨大。我立刻打车到警察局报警,警察扫描了我的身份证后,说我的身份不存在于中国公民系统中,无法立案。我回到家,打开贴吧想要把我这一天的经历吐槽一番,但是登录一直失败,密码找回,登录上去了之后,发现自己的昵称被改成了别人,自己的账号在今天发了很多八卦帖子。

硬设备、软应用、企业、政府机构乃至国家本身,都会「否认」我。除了我的朋友和亲人以外,甚至都可以无法判别我的存在。

听起来很不错吧?如果上面的情况太极端,我们只需要想象一下身份证或者信用卡如果丢了,我们会有多着急,就能够理解「身份」的重要性了。

现实生活中,每个人的所有系统中的「身份」定义了该个体的存在职能,甚至赋予了个人存在的意义或价值。

你可能认为你知道自己的身份是什么,但实际情况远比设想的要更危险和复杂。在我们进入雷区之前,我们先来回顾一下身份的含义。

所有的共有社会机制,全都是为了服务社会的某种发展倾向而创造出来的。身份也是如此,其本身毫无意义,亦无确切价值,但当和实际的人们需要结合起来之后,它就有了无穷的变种和使用场景。

当人有了私有物品意识,便会希望维持其所有权不受他人侵犯。31,000 年前,在一些有固定规范和共识的小亚细亚部落中,人们将自己的手掌通过雕刻的方式印记在某些物品上,以此来标记身份。在部落成员尽皆认可的情况下,身份用来标记物品所属,是维系私有财产的纽带。

公元前 450 年,各文明古国的规模不断扩张,古波斯一位叫做 Nehemiah 的官员获取到了有史以来第一份旅行文件——「护照」,前往犹大公干。在这个场景中,护照代表着身份,在两国使节未曾谋面的情况下,提供了可信的身份保障,成为了成功对等交流的基础。耳熟能详唐玄奘的通关文牒,与此有异曲同工之妙。

公元 14 世纪,机缘巧合下,商贸盛行的地中海沿岸出现了资本主义萌芽,私有银行开始出现。银行家们将钱小额借贷给平民,大额借贷给政府军政组织,并以收息为利。在这个场景中,与身份挂钩的是背景、权力和信用。当银行家可以确定某个人的身份,就可以对其身份所代表的偿还能力进行评估,继而有的放矢地借贷,对贵族给予更高额度,对贫穷者者关上大门。

1986年,中国通行现代身份证系统。在那之前,如果要证明身份,除了户口本以外,还需要携带档案、介绍信,甚至需要相熟之人互相介绍才能顺利,而身份证出现了之后,一切需要使用居民身份的场景:火车验票、银行开户、办理驾照、申请工作、居住上学等等流程也都随之简化,继而普及开来。

上面四个例子从古到今描述了使用了身份的四个场景,实际上也体现了身份在四个方面的作用,依次为「权属」、「交流」、「信用」和「社会」方面。

「权属」或者「权限」是最直观的身份的作用,表示了人和物之间的关系,而当资源出现富余,非劳动性质工种出现后,会出现贸易、战争、外交、宗教等复杂的人与人之间的「交流」,部落画地为圆成为了城邦和国家,由身份开始演变出地位、权力和财富。工商业的发展促生了资本主义,于是一个人的身份上又捆绑了更多的概念:「信用」、权益、还款能力、存款量等等。而进入了现代,社会的发展和保障体系愈发完善,与整个国家相对应的「统一身份」体系出现了,在国家范围内,身份证件打通了同一个自然人在不同国家系统中的各个身份,在某种程度上得到了身份与认证的完整统一,而随之而来的,是社会效率大幅增高、社会发展进程急速加快。

可以看得出来这四个层面并非是随机顺序,而是按照着人类文明的进程而逐次展开,随着人类社会的广度和深度在不断延伸,「身份」作为社会基础元素的功能也不断地进化发展。每当有突破性的技术发展或社会变革的时候,身份就会随之在新的世界中有了新的、不断累加的定义,其重要性也随着社群范围扩大、系统愈发多样复杂而急剧提升。

每当世界或某些特定场景发生了重要变革的时候,身份系统作为基本属性,也会随之发生进化。变革越巨大,进化也就越明显。

而当前的世界,正正处在历史上最巨大的变革之中。


变革

世界每次革命的起源,都是基础技术和理论的发明、稳定并且推广所带来的,而初始研究基础的人,对他们所研究事务的未来影响力,往往毫无概念。很少有人意识到,身份安全作为「信息化」革命的底层基础,到底有着多么特殊的重要性,也因此,这个话题值得我们去深入探讨。

「信息化」变革有诸多特性,不一而足,最明显也最基础的,是「数字化」。

数十年前,随着基础网络技术的不断拓延,最基础的书籍资料等最开始被数字化保存,之后邮箱的出现代表着网络超低成本超距交流的出现,再往后随着互联网的出现和成熟,一批批的渗透到我们生活方方面面的硬件和应用软件前赴后继而来,周围一切牵扯到数据和交流的机制,正在以不可阻挡的速度完成它们各自的数字化进程。

实在太快了。

人类历史记录中并无这种短时间内翻天覆地的记录,社会的有机自适应力远远跟不上时代的变迁。

在历史中,我们有数百、上千年甚至上万年的时间来消化某一项历史进程带来的革新,有充分的缓冲来释放新技术新理念带来的突破性压力。而现在,数千年的沧海桑田被压缩成了十年光怪陆离,技术革新带来的突破像气球内的不断生长的针尖,时刻在挑战试图爆破。

海量的数据和系统正在不顾一切地迁移到网络中,好尽快开始享受网络带来的巨大便利、低廉成本和规模化效应,不仅仅是一些相对无关痛痒的娱乐、咨询、交际等轻应用,很多军事、政府机构数据、金融、财务、征信体系、个人隐私、保密数据也同样接入了这巨大的网络社会中。

很少有人意识到在这繁花紧簇之下孕育的巨大危机。

你看到问题了吗?

当身份问题最多只能导致社交网站信息泄露,邮箱无法登录,或者游戏平台账号被盗窃使用的时候,我们并不会太过惊慌,因为这些应用与现实社会的接触面并不太广,能造成的损失也非常有限。然而,随着巨大车轮的运转,随着诸多更严密的场景、数据、应用的数字化,网络世界和我们真正生活愈发纠葛不清,风险可能造成的损失也成倍增加。

很多人开始拥抱各种IoT技术产物,能否设想一下,如果烟雾探测器被强制登录并手动触发了警报,会发生什么?如果在自动驾驶过程中GPS信号被劫持到了塔克拉玛干沙漠中,会发生什么?如果自己家的智能门锁认证机制被攻破,任何人的指纹都可以验证通过,又会发生什么?而我们作为新鲜事物尝鲜者,在应用落地相对早期,在相关规定法律条文仍未成型的时期,真的可以维护自己的生命财产安全吗?

和很多人设想的不同,身份保障是一套完整的体系,并非是在某些聚焦点做好就足够的。我们知道,某些城市中,所有交通路段的监控摄像头,访问使用的都是统一的默认密码,而默认密码,就写在摄像头设备的背面。也就是说,理论上只要知道摄像头的公开访问地址,并且拿把梯子爬到摄像头背面照张相,就能够访问到整个城市的交通设想体系中,并进行监控、篡改甚至破坏。

是摄像头的安全质量不过关吗?不见得。任何有密码的产品在说明书中都会要求用户尽快重置密码,无论多么有效的安全体系,都禁不住没有形成安全观念、未受到安全使用教育的使用者故意或无意的滥用。

那么问题的根源就在于我们整个社会对身份安全的教育不够吗?不,这仍然只是症状而非病因。

最大的风险,不是来自于危机有多么严峻,而是源于我们对其有多轻视。我们如果仍然以淡然处之的心态,对待在新社会形态中身份安全问题,就一直不会去弥补漏洞、寻求进步,风险就会永远一直存在,而且会随着使用场景越来越广而越来越危险。

商业未来是什么样子的?我们相信,一千个人眼中会有一千种哈姆雷特,但是有一点是共识的:

Everything that we will do in the future is all about delivering a personalized experience, and the cornerstone of personalization is identity management.

——Scott Howitt, MGM CISO

几乎任何商业业态在未来都会进行更加细化的划分,目的是为了为每个人提供定制化的体验或服务。而这未来商业「长尾」化的基石,就是身份管理和身份安全。(笔者译)

板上钉钉、无可更改、无可抵赖地确定你是谁。

而确定你是谁,正在变得无比缥缈和复杂。


现况

我们举个例子,来设想下,如果邮箱密码泄露了,会发生什么。

在很短的时间内,黑客可以把所有邮件以及它们的附件全部抓取下来,并且可以从邮箱账号的用户信息栏获取到邮箱拥有者的性别、年龄、学历、联系方式等基本信息。

在把邮件进行简单过滤以后,能获取到每个月的信用卡账单信息,能看到日常工作记录和项目交流记录,能获取到朋友之间的某些隐私图片或者视频。在查看历史记录后,黑客可以冒充受害人,向受害人的亲朋或同事发一封借钱的邮件,也可以利用这个邮件不留痕迹地去注册一些违法乱纪的网站。

很多常规网站在使用邮箱注册了以后,会向邮箱中发送验证码或者欢迎邮件,黑客以此可以得知用户都在哪些网站用这个邮箱进行了注册。黑客可以去这些网站尝试使用同样的邮箱和密码进行登录,80%的可能用户在不同系统之间使用的是相同或至少是类似的密码,所以很可能黑客可以登录很大一部分受害者日常使用的网站或应用服务。

而如果某个应用开启了邮件二次确认的话,由于邮件的访问权限已经透明,二次确认的手段可能也会被绕了过去。如果不牵扯到金钱的话,大多数系统都不会有非常成熟的足够安全的保障体系。到这一步,很多应用的访问都会被攻破,而根据这些被攻破的网站的业务不同,同时又开放了这些或高或低的新的业务权限给黑客,让黑客可以从这次单点突破中获取到更多的有效信息,牵连到更广泛的场景或更多的人,最后仍然可以将该邮箱账号信息售卖以换取基本利润。

当我们的身份证或信用卡遗失之后,我们会非常焦急紧张,食不知味夜不能眠,生怕有人会以此为恶,造成自己的损失。

但是如果是邮箱密码被盗窃了,很少有人会紧张。如果收到通知(如果邮箱系统有能力进行入侵检测并发出告警通知的话),可能也就是改个密码就足以心安了。与此对比,当现实中门钥匙遗失之后,甚至有人会考虑换一把门锁来确保安全。

在现在的网络环境中,邮箱不仅是一个发送邮件进行交流的地址,而也同时代表了个人的身份。邮箱可以绑定有个人的银行信息、工作信息、隐私机密信息,很多应用系统使用邮箱进行多因素认证、身份确认或密码找回。很多系统的身份安全体系都建立在稳定的可确定的邮件系统安全之上。邮箱作为虚拟网络世界中最典型的身份安全核心之一,一旦被突破,后果会有连续的深远性,随着与其绑定的业务种类越来越多、越来越核心,其后果甚至可能会超过身份证的遗失或伪造。

人们对此的认知严重缺乏、反应异常缓慢,在社会发展大车轮在持续加速碾压向前的时机,也就给黑客的入侵提供了天然的土壤。

在关键政府机构的门口都可以看到武装军官站岗,但在很多关系到社会民生甚至军国大事的网络访问的虚拟大门口,并不会指派专人严阵以待。

而在信息化的过程当中,后者的重要性愈演愈烈。

在现代网络出现以前,只有「国家」、「工作」、「学校」等等非常少数的「应用系统」存在,因而身份是贫瘠的。三两个同根同源的系统之间,如果希望将他们的身份体系打通,并不会有太大的困扰,人们在大多数生活场景中,也无须担心身份的确认或关联问题。

而现在,依靠着互联网的超距便利,每天都有成千上万个「应用系统」井喷而出。在工作场景、在学校场景、在私人场景、在娱乐场景等等都有着无穷多的应用繁花簇锦而来,在这些应用争宠般抢占使用者的精力和时间的时候,同时对身份安全造成的巨大而难以弥合的紊乱。

这是历史中从未发生过的巨大的观念性的身份变革。

现在,见面打招呼不再应该是递名片了,而是应该递一张纸条,并介绍说「这是我的 IP 地址,我的 MAC 地址,我的 GPS 定位,我的用户使用画像,我的微信号、百度贴吧账号和 github 账号和我的指纹。这就是我,很高兴认识你。」

但可惜的是,历史没有教导我们如何处理新鲜事物,它只用它笨拙的惯性思维,促使我们尝试用旧有的方式解决全新的问题。

一个用户使用各种各样的不同应用,于是,每个单独的应用有了各自的身份系统,而这些身份系统互不相干,尽管这些身份系统对应的现实的自然「人」,只有一个。在这基础之上,只有单系统的「身份认证」作为基础,已经无法满足动态应用场景,「多身份治理」开始走上了舞台。可以这样说,「多身份治理」是我们从「单一身份」到「统一身份」的一个过渡状态。历史上,所有事物的处理核心都是人,今天,无论应用多繁杂,核心仍然是人,未来亦如是。这点未变,也不可能改变。在现在应用变得多元而发散的情况下,一个用户的身份有明确的化为一的趋势。

身份曾因贫瘠而「唯一」,未来将随技术发展成熟而最终「统一」。

趋势无法质疑。


理念

身份系统有两个很有意思的基本特点。

一、和系统业务基本无关。大多数应用中只是需要有一个身份来进行用户标识而已,在很多应用软件公司中,身份安全纯属鸡肋,不能帮助业务带来收益,但是又不可能丢开。

二、非常复杂。一个真正安全的身份系统的复杂度,甚至会超过很多应用系统本身,投入的人手专业性要求非常高,耗费巨大。

绝大多数人,包括很多技术人员和管理者,都对身份系统的重要性没有任何清晰的认识,也就不会愿意投入大笔资源到他们看来不能产出同等效益的功能中。是这一点,导致了良好身份系统的普及缓慢,接受度仍然低下,但也正是因为明晰地看到了这一点,我们九州云腾找到使命并应运诞生。

导致市场普及度低下的这同样的两个原因,换个角度看,又同时代表着身份服务的产品价值和竞争壁垒。九州云腾能够为产品、企业和开发人员提供完整的安全统一身份产品和定制化解决方案,我们有专业的人员和产品,来保障我们所有客户和用户的身份安全。

世界并不缺乏先进的技术。我们已经有了针对于各个不同场景、情况下的身份统一的协议和方案,相当于网络发展过程中 TCP  IP 协议已经发展成熟。我们并不缺乏实际解决问题的手段,但是市场仍然缺乏足够的认知,行业仍然缺少先行者的推动。在将成熟的技术、完善的解决方案推广到相对落后封闭的系统的过程中,将会有非常严苛的克服障碍、披荆斩棘的过程,但同时也会产生瀑布般巨大的势能,并为创造者和先驱带来荣誉、机会和财富。

我们再展开去看,身份的未来会是什么样。

这个话题太广,我们不妨类比下万维网诞生过程,就从单一角度去看。在万维网出现之前,各个虚拟系统之间像是海上漂流的「孤岛」,老死不相往来,用户使用应用系统受限于资源、数据存储和地址位置的约束,打开电脑,只有电脑最基础的功能,以及在一些特定场景下内网的简单机器网络。

而到了万维网发明几年后,大众、甚至一些行业专家,都仍然看不到万维网的具体应用是什么,有电视主持人在节目中当众嘲讽电子邮件的应用。很多人无法理解,电脑可以用驱动安装软件,办公学校等场景有局域网、内网,一切都已经便捷了这么多,为什么还要继续互联呢?为什么要用电子邮件,而不是直接寄信呢?

互联网无疑是一片肥沃的土壤,但只有在这片土壤被深深耕耘之后,上面才会孕育出智慧之果、价值之实。又有谁能预想到,万维网在短短 20 年内会造就今天?

统一的、可信的身份系统是能够允许人们接触未知的先提条件,它允许了陌生人和陌生人、陌生人和陌生系统之间的交流有一个基本的、可靠的基础。在远古的历史中,如果没有可信的身份系统,人类走不出依靠强关系维系的部落时代,最大的有组织的社会将只有数百人。

连接产生交流,碰撞创造伟大。

而当下,所有的身份系统支离破碎,各自为政。我们也不妨畅想一下,当身份结成网络,当每个人在整个网络体系中的所有身份可以确定并且统一的时候会发生什么。我们的所有行为和操作将成为度量我们身份的标识,任何新服务都可以直接调用查看我的信用;摩拜单车、租房不再需要押金;贷款、申请信用卡等都不再需要填表申请;我在网页上的广告将精准地完全按照我的喜好和需要而展示;我在浏览视频网站的时候,也可以弹出来一个窗口,提醒我信用卡应该还款,或我的航班即将起飞。

一个人的虚拟身份将由其使用的所有应用中的身份网交织而成,统一而又可以去中心化。而人与人的身份之间,又会再次成网。应用身份系统的网络可以做到以统一身份为核心的数据流通,而人与人之间的身份网络会将身份的革命推向高潮,真正实现可以将现实社会中的组织、交流、社会机制完全映射到虚拟世界中去。

个人的虚拟身份将会可以像身份证一样有着实际、甚至更可靠的意义,而在这变革的前后,社交、娱乐、金融、广告、保险、医疗等等行业甚至包含政府在内,也会发生翻天覆地的变化。

身份是钥匙,而一个人的身份从来不「重置」、「退出」或者「宕机」,身份与人如影随形,24*7,无论你是否在线。

眼下,由于国家政策的上层合规推动,和企业场景内愈发复杂的应用环境和「云大物移」的趋势,我们的身份服务正在有针对性地解决特定场景的特定问题。而毫无疑问,特定场景会变成普遍场景,特定问题也会降临到普通用户的使用上。

 

在市场走向成熟的过程中,九州云腾的身份安全产品也会紧紧伴随其脚步。身份服务将会成为虚拟世界中类似衣食住行的基础服务,不光鲜但绝顶重要,消失不见而又无处不在。


连接未来

人独特而自由,而你真正是「你」的权力,是我们保护的理念,是我们创造的信仰。

我们是谁?我们是软件工程师,我们是安全专家?我们是UI设计师?我们是产品项目管理者?我们是市场和销售?不不不,我们到底是谁?是歌手?是球星?是猎手?是登山爱好者?是吃鸡团队?

我们远超于此。充沛的创造力,深厚的经验,卧薪尝胆的耐心和胆气,拥有身份安全专业知识的武装,老成持重又随时进化发展,我们是保卫者,是守望者,是革新者。

九州云腾,连接未来。

logo

 

原文链接: https://mp.weixin.qq.com/s/o9NNfY7xGWJreCKmlI10kg

解决Spring mongodb 异常: java.lang.IllegalArgumentException: Could not determine IsNewStrategy (非spring boot环境)

在一次升级spring mongodb 的 版本为1.10.7.RELEASE后, 抛出如下异常

isnew

百思不得其解, 查看源码 IsNewStrategyFactorySupport 中有 getIsNewStrategy 方法,

getisnew

Why, 那肯定不是代码问题, 是配置问题吧(经验所想,旧版本1.5.6.RELEASE无此问题); 再从这方法名来分析 is new strategy (是否为新的策略)

这下确定肯定是某类新的功能配置没加上, 结果就是增加一配置,如下:

<mongo:mapping-converter base-package="your.package" db-factory-ref="mongoDbFactory"/>

 

在 spring的XML配置文件中添加即可解决. your.package 指定实体(domain)所在的包名

 

各类JWT库(java)的使用与评价

https://jwt.io/ 网站中收录有各类语言的JWT库实现(有关JWT详细介绍请访问 https://jwt.io/introduction/),

其中JAVA语言到目前(2018-06)有6个实现库,如下图:

jwt

按顺序依次是

Auth0实现 的 java-jwt

Brian Campbell实现的 jose4j

connect2id实现的 nimbus-jose-jwt

Les Haziewood实现的 jjwt

Inversoft实现的prime-jwt

Vertx实现的vertx-auth-jwt.

 

以下是各个库的使用测试

java-jwt

oauth0

完整测试链接  https://github.com/monkeyk/MyOIDC/blob/1.1.0/myoidc-server/src/test/java/myoidc/server/infrastructure/Auth0JwtTest.java

点评:

Auth0提供的JWT库简单实用, 依赖第三方(如JAVA运行环境)提供的证书信息(keypair);

有一问题是在 生成id_token与 校验(verify)id_token时都需要 公钥(public key)与密钥(private key), 个人感觉是一不足(实际上在校验时只需要public key即可)

 

jose4j

jose4j

完整测试链接: https://github.com/monkeyk/MyOIDC/blob/1.1.0/myoidc-server/src/test/java/myoidc/server/infrastructure/Jose4JTest.java

点评:

jose4j提供了完整的JWT实现, 可以不依赖第三方提供的证书信息(keypair, 库本身自带有RSA的实现),类定义与JWT协议规定匹配度高,易理解与上手

对称加密与非对称加密都有提供实现

 

nimbus-jose-jwt

nimbus

完整测试链接: https://github.com/monkeyk/MyOIDC/blob/1.1.0/myoidc-server/src/test/java/myoidc/server/infrastructure/NimbusJoseJwtTest.java

点评:

nimbus-jose-jwt库类定义清晰,简单易用,易理解 , 依赖第三方提供的证书信息(keypair), 对称算法 与非对称算法皆有实现.

 

jjwt

jjwt

完整测试链接: https://github.com/monkeyk/MyOIDC/blob/1.1.0/myoidc-server/src/test/java/myoidc/server/infrastructure/JJwtTest.java

点评:

jjwt小巧够用, 但对JWT的一些细节包装不够, 比如 Claims (只提供获取header,body)

 

prime-jwt

primejwt

完整测试链接: https://github.com/monkeyk/MyOIDC/blob/1.1.0/myoidc-server/src/test/java/myoidc/server/infrastructure/PrimeJwtTest.java

点评:

prime jwt库怎么说呢, 有些地方不符合JAVA语言规范, 支持对称算法(HMAC) 与非对称算法(RSA), 也算容易理解

 

vertx-auth-jwt

vertxjwt

完整测试链接: https://github.com/monkeyk/MyOIDC/blob/1.1.0/myoidc-server/src/test/java/myoidc/server/infrastructure/VertxAuthJwtTest.java

 点评:

Vertx Auth Jwt 库算是最不容易理解的一个库了.花了不少时间才弄通这一示例. 不容易上手. 并且生成与校验id_token 时都需要公钥与私钥,不足.

 

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

以下是在使用中的一些总结或注意点

1. 几乎所有库都要求JAVA版本1.7或更高版本, 1.6或以下的版本需要二次开发(或不支持)

2.从易用性, 扩展性, 完整性等来看, 使用首先推荐 jose4j, 其次是 Nimbus-jose-jwt.

3. JWT是实现OIDC的基石,掌握其使用对实现OIDC有很大帮助(同时对JAVA证书使用, PKI体系的掌握也有要求)

 

 

https://github.com/monkeyk/MyOIDC

spring-oauth-server 2.0.0 发布,使用Spring-Boot2.0实现

经过一年多的时间后,我们发布了 spring-oauth-server 2.0.0版本.

使用Spring-Boot 2.0版本重构, 进入模块化,零配置时代. 更符合技术发展与实际需要.

相比之前的版本(1.0及之前版本), 更新如下:

1. 全新的 Spring-Boot风格

2.ClientDetails中的 client_secret 字段加密保存

3.密码加密方式由MD5变成 BCrypt

4.增加CSRF机制支持

5.resourceId变为可选(但建议使用固定的resourceId)

https://gitee.com/shengzhao/spring-oauth-server/tree/2.0.0/

mvn install 本地jar

仅此一命令, 记录下来常用.

mvn install:install-file -DgroupId={groupId} -DartifactId={artifactId} -Dversion={version} -Dpackaging=jar -Dfile={xxxx}.jar

 

私有lib配置 (pom.xml)

<repositories>
    <repository>
        <id>basedir</id>
        <url>file://${project.basedir}/lib/</url>
    </repository>
</repositories>

 

Spring Security 5中 PasswordEncoder的使用

在最新的 Spring Security 5发布版本中, 出于安全性的考虑调整了PasswordEncoder的实现与使用策略.

1.以前常用的实现 StandardPasswordEncoder, MessageDigestPasswordEncoder, StandardPasswordEncoder 不再推荐使用, 全加上了@Deprecated ,并有具体的说明

1

推荐使用BCryptPasswordEncoder, Pbkdf2PasswordEncoder, SCryptPasswordEncoder等

 

2.增加 PasswordEncoderFactories 类提供一个静态方法 createDelegatingPasswordEncoder()方法, 使用委托方式创建PasswordEncoder的实现

2

在此方法的实现中,实际上使用了 BCryptPasswordEncoder 作为默认的实现(我想, 这也是Spring Security团队推荐使用的吧).

 

3.关于加密salt(盐值)的变化. 在之前的使用中, 一般在使用时自己指定salt值,一个配置示例如下:

3

而在新的使用中, salt的实现 将由各具体实现类去处理(如使用随机生成的值), 以 BCryptPasswordEncoder的实现说明

4

如图,在进行加密时, 使用随机生成的salt值或由指定的 strength, random去生成.

比如原密码为 admin, 分别进行两次 bcrypt加密的结果如下

$2a$10$OEaUDkvTlWY/BpoAL7f.H.X7Cz9x3OR3pfWv5wasidP4B7izvyRy6
$2a$10$BBFV5eyg4YoBLThOzi1bDO0WYDBCzcLq3ISokgzxCB/CM0YTXHrha

里面也有 salt 的作用.

 

 

以上为使用 Spring Security 5中 PasswordEncoder的变化总结, 希望对你有用.

当然, 更安全的加密可以使用基于Spring Security提供的类去进行扩展自己的PasswordEncoder实现

Java HeartBeat 2.0.0 发布,心跳检测应用服务器的Spring-Boot程序

Java HeartBeat 2.0.0版本已经发布, 使用Spring-Boot框架, 全新的”零配置”设计,向微服务化靠近,抛掉沉重的XML配置文件.Java HeartBeat 是心跳检测应用服务器(如 Tomcat,Jetty)的 Java Web 应用程序。

2.0.0版本主要更新如下:

1).使用 Spring-Boot 框架重构, 向微服务靠近
2).使用log4j2替换旧的log4j
3).更新登录页面样式,增加版本显示
4).单元测试使用Junit替换旧的TestNG
5).Sitemesh使用3.0版本替换2.0版本

HeartBeat 2.0.0版本访问地址: https://gitee.com/mkk/HeartBeat/tree/V-2.0.0/

https://gitee.com/mkk/HeartBeat