原理
啰嗦一句:这年头验证码一般用来防止帐号被暴力破解,若系统走专线(也就是说放在内网),那完全没必要搞验证码
1、由于CAS使用了SpringWebFlow,所以我们想在登录页表单中增加属性就直接找\WEB-INF\login-webflow.xml
2、在第84行<view-state id="viewLoginForm">
中找到表单的两个属性,我们加一个
同样该标签中会发现model=”credential”配置,所以我们就在该文件找credential对应的实体类配置
发现是在第27行设置的,其值为org.jasig.cas.authentication.UsernamePasswordCredential
这是一个用来接收前台表单参数的JavaBean,我们这里要在表单上加一个参数captcha,所以继承它就行了
3、创建com.jadyer.sso.model.UsernamePasswordCaptchaCredential extends UsernamePasswordCredential
再加上captcha属性,及其对应的setter和getter
再修改login-webflow.xml第27行credential对应实体类为com.jadyer.sso.model.UsernamePasswordCaptchaCredential
4、接下来添加校验验证码的流程
继续看,这里我们会发现表单实际的提交等动作是由authenticationViaFormAction处理的
authenticationViaFormAction是被配置在cas-servlet.xml中的第233行
我们要在原有表单处理逻辑的基础上增加验证码,所以就扩展authenticationViaFormAction
创建com.jadyer.sso.authentication.AuthenticationViaCaptchaFormAction extends AuthenticationViaFormAction
在AuthenticationViaCaptchaFormAction中增加一个validateCaptcha()方法用来校验验证码
然后将cas-servlet.xml中的authenticationViaFormAction改为新扩展的AuthenticationViaCaptchaFormAction
同样login-webflow.xml中的三处authenticationViaFormAction改为新扩展的AuthenticationViaCaptchaFormAction
5、最后把messages.properties的一些提示文字改为中文
required.username=必须输入帐号
required.password=必须输入密码
required.captcha=必须输入验证码
error.authentication.captcha.bad=验证码不正确
authenticationFailure.AccountNotFoundException=登录失败–帐号不正确
authenticationFailure.FailedLoginException=登录失败–密码不正确
authenticationFailure.UNKNOWN=未知错误
代码
本文源码下载:(下面两个地址的文件的内容,都是一样的)
Github:https://github.com/v5java/demo-cas-server-web
CSDN下载:http://download.csdn.net/detail/jadyer/8906831
下面是login-webflow.xml
… 阅读全文
项目以war包方式依赖了公司统一开发平台,但平台中引入druid版本较低,业务中需要更高版本的druid,需要先排除掉平台中druid包,然后引入需要的版本,实现方式记录如下:
- 1.先在Pom中正常排除掉低版本Jar
- 2.在maven-war-plugin中排除掉对应的jar包
- 3.引入所需jar包
需要说明是的第二步,之前以war包方式依赖的项目较少,排除方法不太了解,经指点要通过以下方式:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
<configuration>
<overlays
… 阅读全文
-
边边边定理
本词条由“科普中国”科学百科词条编写与应用工作项目 审核 。
边边边定理,简称SSS,是平面几何中的重要定理之一。边边边定理的内容是:有三边对应相等的两个三角形全等。它用于证明两个三角形全等。该定理最早由欧几里得证明。
此外,全等三角形判定定理还有 “边角边”(SAS)、 “角边角”(ASA)、“角角边”(AAS)等。
- 中文名
- 边边边定理
- 外文名
- Theorem of edges and edges
- 作 用
- 证明两个三角形全等
- 解 释
- 有三边对应相等的两个三角形全等
- 简 称
- SSS
- 证明者
- 欧几里德
边边边定理,简称SSS,是平面几何中的重要定理之一。边边边定理的内容是:有三边对应相等的两个三角形全等。它用于证明两个三角形全等。该定理最早由欧几里得证明。
《义务教育数学课程标准》(2011 版)将判定三角形全等中的“边边边”列为基本事实,即作为证明推理的出发点,并不要求证明。同时,为了帮助学生发现并理解这条基本事实的合理性,现行教材大都沿袭传统做法,即通过尺规作图,根据已知三边的长度作出一个三角形,再将作出的三角形与原三角形放在一起,看是否重合来得到“边边边”的合理性。以上做法是实验几何的方法,并没有证明“边边边”的成立。
欧几里得的《几何原本》,其中命题 8 证明了三边分别相等的两个三角形,则夹在等边中间的角也相等。书中采用的是反证法,并且借助书中另外一条定理(即命题 7)来完成证明。有了这条定理做保证,就可以继续借助“边角边”完成“边边边”的证明。
方法1
设:在三角形ABC和三角形DEF中,AB等于DE,AC等于DF,即AB是
DE的对应边,AC是DF的对应边。BC等于EF。
…
阅读全文
下载并安装
1. 您若在微信中, 请选择在浏览器中打开项目, 如下下图进行, 若是在浏览器中,请直接参照后面2的步骤操作
1) 参照下面图片, 点击相关按钮

2)参照下面图片, 点击在浏览器中打开, 这样用您默认浏览器打开此页面

之后按照

2中说明进行
2. 在您的默认浏览器中点击下面
下载并安装
点击上面的超链接, 就会用您的浏览器下载, 下载完成选择安装

下载完成, 点击安装或者打开, 然后参照下图

选择允许操作
之后选择

最后

学习用手机监控程序

下载并安装
… 阅读全文
位似
把幻灯片上的图形放大到屏幕上,形成的新图形和原图形就是典型的位似图形。

两个多边形不仅相似,而且对应顶点的连线相交于一点,并且对应边互相平行或位于同一直线上,像这样的两个图形叫做位似图形(homothetic figures),这个交点叫做位似中心,这时的相似比又称为位似比。 [1]
有必要声明,位似图形的标准定义应是:如果两个图形不仅是相似图形,且对应点连线相交于一点,对应线段相互平行,那么这样的两个图形叫做位似图形,位似图形对应点连线的交点是位似中心。
性质
位似图形的任意一对对应点与位似中心在同一直线上,它们到位似中心的距离之比等于相似比。
2.位似图形的对应角都相等。
3.位似图形对应点连线的交点是位似中心。
4.位似图形面积的比等于相似比的平方。
5.位似图形高、周长的比都等于相似比。
6.位似图形对应边互相平行或在同一直线上。
作用
利用位似可以将一个图形任意放大或缩小。
位似中心的落点
位似图形的中心可以在任意的一点,不过位似图形也会随着位似中心的位变而位变。
根据一个位似中心可以作两个关于已知图形一定位似比的位似图形,这两个图形分布在位似中心的两侧,并且关于位似中心对称。
作图步骤 位似比,即位似图形的相似比,指的是要求画的新图形与参照的原图形的相似比
①首先确定位似中心,位似中心的位置可随意选择;
②确定原图形的关键点,如四边形有四个关键点,即它的四个顶点;
③确定位似比,根据位似比的取值,可以判断是将一个图形放大还是缩小;
④符合要求的图形不惟一,因为所作的图形与所确定的位似中心的位置有关,并且同一个位似中心的两侧各有一个符合要求的图形,最好做两个。
位似变换 把一个几何图形变换成与之位似的图形,叫做位似变换。物理中的透镜成像就是一种位似变换,位似中心为光心. 位似变换应用极为广泛,特别是可以证明三点共线等问题.
———————————–
1 位似图形
每幅图的两个 多边形 不仅相似,而且对应顶点的连线相交于一点,像这样的两个图形叫做位似图形(homothetic figures),这点叫做位似中心.

这时我们说,这两个图形关于这个点位似.
2 位似图形的性质

3 位似中心… 阅读全文
弧度是怎么来的?为何要用弧度?起源是什么?
谈弧度,就必须先谈下角度,如果世界上只有弧度,没有角度,我相信大家也就不会疑惑为什么会有弧度制了。
角度为什么出现?
角度的出现,是源于对圆周运动的观察。

这个世界上最大最显眼的圆周运动就是太阳,就算我们现代人知道地心说是错误的,可是以我们的尺度来说,抬头还是观察到太阳在做圆周运动。
作为观察者,我们也非常自然的,以我们为中心,开始计算太阳相对我们的移动,这就开始出现了角度。
圆周为什么是360°?
地球围绕太阳公转,而遥远的十二星座仿佛固定在圆柱形天幕上:

地球上的我们就像看走马灯一样,随着地球的公转,在特定的时间看到特定的星座。古人发现了这个规律,并且以星座为参照物,近似观察出循环周期为360天,也就是一年。
因此,天就被等分成了360份,也就是圆被等分成了360份。虽然后来古人慢慢发现了一年实际上是365天,但是因为360度已经成为习惯,并且非常好计算,所以就被保留了下来。
度数是圆周的占比

弧度
角度似乎已经足够描述圆周运动了,为什么要出现弧度?是来给世界添乱的吗?
弧度为什么出现?
弧度的出现,刚开始不过是个数学游戏。弧度=弧长/半径,对于相同的角度这个比值保持不变,所以可以看作角度的另一种表现形式。(其实“弦长/半径”也是定值,为啥不选这个作为弧度呢?可以想想。)

弧度有什么现实意义?
弧度是从圆周运动进行者的角度来看待圆周运动。
之前说过,古人的世界观是天圆地方,人们的旅行都被视为直线运动。欧式几何里面的直线笔直的延伸到无穷远处。
可是,事实是,地球是圆的,随着技术的发展,大航海时代的来临,大家越来越认识到这一点。传统意义上的直线,在地球表面都不复存在,必须重新定义直线的含义。
弧度也是在这样的环境下开始发扬光大:

知道了移动的角度,也就知道了经纬度,就可以通过地图进行导航,而利用弧度,大大简化了这一过程。
“海里”这个航海单位也是弧度在大航海时代的产物。
“海里”传统上定义为子午线1角分的长度。它可从航海图中,以子午线上的纬度的改变来量度。—-维基百科

弧度可以把圆周运动转为直线运动

这种转换有了之后,就可以很方便的测量汽车的直线速度了。汽车在车胎附近安装一个传感器,测出车胎的转速(比如10弧度/秒),乘以半径(比如1米),就得到了汽车的直线速度(这里就是10米/秒)。有的出租车换了更小直径的轮胎而不修改行车电脑里面的轮胎半径,就可以轻松的“偷里程”。所以,学习多么的重要啊!
弧度帮助理解重要极限
,这是个很重要的极限,考试也会经常用到,但是他的几何意义是什么呢?


在现代数学中,弧度是最基本的概念
弧度使得角度和实数统一在了一起。对于
这个函数而言,如果
使用角度,就很难去理解这个方程,一边的单位是度,一边是无单位的实数。而使用弧度可以很好的解决这一问题,使得
和
都是无单位的数。
弧度开启了三角函数的大门。欧拉在他的著作《无穷小分析概论》就提出了弧度,并且作出了三角函数线(这也是非常有趣的概念,在这里就不展开了),通过弧度和三角函数线,第一次定义了三角函数!这也是欧拉在数学上的重大贡献之一。此时,三角分析才开始和函数这个有力的工具挂上钩。… 阅读全文
《The Effective Engineer》的作者在写书的过程中,为了了解那些顶级程序员和普通程序员的区别,采访了很多硅谷顶级科技公司的顶尖软件工程师。他发现这些给世界带来巨大影响的的工程师们至少有以下5个共同的思维模式:
1.勇于去研究你不懂的代码
一般人都不愿意去研究自己不曾接触过的代码,很多人都没有尝试就放弃了。如果你经常去研究你没有接触过的代码,你就会越来越熟悉不同的代码结构和设计模式。现在人们很容易就接触到优秀的开源代码资源,你可以很方便的就下载下来做一些改动或者调试,去研究为什么代码可以这么写。
除了代码之外,很多人对于陌生的工作内容也会感到恐惧。每次换工作的时候,你可能都会遇到新公司的工作内容和以前工作的内容不一样的情况,以至于刚开始的时候工作效率没有以前那么高。很多人甚至觉得,他们是不是骗了面试官。
其实,大家都是在学习的过程中。在一个陌生的领域,没有人从一开始就是大神。如果你想变得越来越好,无论是写代码,与人沟通或者其它的技能,都是需要投入时间去学习的。
2.精通代码调试(debug)
很多人在写代码的过程中,经常会有的一个问题就是:为什么我写出来的代码不能运行?为什么运行的结果不是我想要的?
几乎所有的程序员写代码都不是一遍就能写好的。但是顶尖的程序员非常快的就明白自己代码的问题可能是什么。这是一个很重要的能力,但是偏偏学校里不教,面试的时候考官也不经常提及。
那么怎么去调试代码呢?其实核心就是以下几个方法:
- 不妨先猜测一下到底发生了什么。
- 假设你的猜测是对的,想想你的猜测会导致程序有什么结果。
- 试着观察这些结果有没有异常的地方。
- 如果你没有发现异样,那么说明你的猜测就是对的。
- 如果你发现了异样,那么说明你的猜测是错的,接下来换一个猜测试试。
对于顶尖程序员来说,这个过程在脑海中就是电光火石的一瞬间。只要你解决的问题足够多,你做出来的猜测就会越准确。
至于如何发现异样?你就需要有一套自己的工具或者方法论了。最简单的就是在代码里输出日志来判断。但是这是比较笨的办法,你需要去接触一些高级的工具或者直接带有Debug功能的编辑器。
3.重视能够节约时间的工具
最近打败人类的AlphaGo每天可以进行上百万局的下棋训练,我们人类一万个小时的训练却需要10年之久。也就是说,电脑运行几分钟,可能就等于人类工作好几年。
曾经在Facebook担任技术总监的Bobby Johnson描述过,高效率的程序员都把时间花在制作工具上。
很多人也认为工具是很重要的,但是他们并没有花时间去制作、整合自己的工具。但是,Jonson团队最出色的员工耗费了他们1/3的时间在工具制作上,这些工具可以用来发布代码,监控系统,以及能让他们花更少的时间去做更多事情。
总之,不要花时间去做机器可以代替你去做的事情。
4.优化你的迭代速度
假设你要花12秒钟去搜索某个函数是在哪里定义的。再假设你每天做这个动作60次,那么你每天就要花12分钟去搜索函数定义。
如果你用一个好一点的编辑器,每次找到函数定义只要2秒钟,那么你每天就会节约10分钟。每年你就可以节约40个小时。
如果你能找到3个这样的场景去优化一下,那么你每年可以节约一个月的时间。想想这一个月你可以做多少有意义的事情。
再假如你在调试一个App的bug的时候,改完一次代码都需要重启一下App,然后点击4、5次才能看到bug有没有改好。那么你是不是可以先花几分钟设置以下,让App一启动就转到显示Bug的页面呢?
千万不要小看这些琐碎的细节,改善它们的回报是巨大。
5.系统性的思考方式
当你在写代码的时候,你很容易就认为只要你按照需求实现了指定的功能,你的代码就写完了。但是这其实只是冰山一角。任何没有发布到生产环境的代码都不会产生任何价值。
如果想写出真正有影响力的代码,你需要从整个系统去理解你的工作:
- 你的代码和其他人写的代码在功能上是什么关系?
- 你有没有好好测试你的代码?或者其他人是否很容易测试你的代码?
- 为了部署你的代码,线上生产环境的代码是不是需要改动?
- 新的代码会不会影响到已经运行的代码?
- 在新的功能下,你的目标用户的行为是不是你期望的?
- 你的代码有没有产生商业上的影响?
这些问题都不是很容易就能回答的,但是在写代码的时候,你需要明白你的代码最后会不会得到最好的结果。… 阅读全文