单点登录CAS服务端登录页添加验证码

  categories:资料  author:

 原理

啰嗦一句:这年头验证码一般用来防止帐号被暴力破解,若系统走专线(也就是说放在内网),那完全没必要搞验证码

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方式依赖的第三方工程中某jar或资源的方法

  categories:资料  author:

项目以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
阅读全文

简单免费的文档中心—dokuWiki搭建指南

  categories:资料  author:

引言

如果说知识就是力量,那么知识库就是弹药库了。不管是一个技术型企业,还是一个热衷技术的个人,如果能有一个能够方便记录、保存以及检索的知识库,想必是极好的。如果恰好你也并没有充足的预算去购买相应的商用解决方案,那么这篇文章兴许对你有点帮助。

Dokuwiki作为一个wiki引擎,软件主体十分小巧但功能非常强大而又灵活。它语法简单,为易写性、易读性提供保障。它提供权限管理和安全策略,能够保证信息库的安全性。它又是开源的,这给熟悉PHP的开发者留下了无限的可能。它还有一个十分活跃的社区论坛,在那里能找到很多关于安装和使用的有用信息,另外,非常丰富的扩展插件也诞生于此。如果有兴趣,你也可以注册一个账号,在社区论坛里提出需求和解决别人提出的需求。
如果提供一个中小团队或者个人使用,那么Dokuwiki非常合适。

最近因为项目需要,团队需要一个轻量级的文档中心。调研了一下,方案有以下几种:

  • Confluence:最有名,最强大,最通用,最老牌,Atlassian,公司级的wiki就是这货。缺点是团队超过10人用时需要付费,而且价格不菲。:( 忍痛Pass
  • Jekyll:著名开源博客工具,大有取代WordPress的趋势,部署相对简单,插件强大,完全免费。缺点是貌似只能够通过和Git交互来新建和更新文章,没有自带的编辑页面。
  • Dokuwiki:简单,轻量,支持PHP即可使用,插件丰富,权限控制强大,完全免费,有编辑页面,不懂代码也可以使用。缺点是缺乏对Markdown的原生支持(即使装了插件,也无法完全解析Markdown)

因此对比一番,果断选择Dokuwiki作为文档中心。

安装

首先去官网下载页面下载最新版本的Dokuwiki,根据自己需要动态打包,不需要安装:

下载页面

开启web容器

笔者环境是Mac,因此下文以mac为例。其它系统参考Dokuwiki的install页面.

Mac系统由于自带了apache,所以打开即可。先输入

sudo apachectl -v

查看系统apache版本,确认apache确实存在:

apache

确定apache确实存在之后,启动apache服务器:

sudo apachectl start

怎样验证apache服务器确实启动了呢?在浏览器输入“http://localhost”,如果发现“It Works!”的字眼,则说明系统成功启动。

apache index page

如何修改服务端口? 打开Finder,进入/etc/apache2/httpd.conf目录(cmd+Shift+G),编辑httpd.conf文件,找到

Listen 80

一行,改成你想要的端口即可。

至此,web 容器启动完成。

部署

Mac下Apach的DocumentRoot目录是

阅读全文

为什么一个锐角确定了三角函数值就确定了

  categories:资料  author:

为什么一个锐角确定了,三角函数值就确定了,今天老师告诉你答案

为什么一个锐角确定了,三角函数值就确定了,今天老师告诉你答案

很多同学在学数学的时候基础知识掌握不扎实,这时候家长采取的措施是打骂或让其回去看书的措施,那老师和家长有没有分析孩子们掌握不扎实的原因,分析原因才是最主要的,其实有很大一部分原因是孩子对基础知识不理解,如果整天是死记硬背得到的知识,他们很快就会忘记,并且他们也不敢兴趣,所以一定要把基础知识的原理搞明白,自然而然孩子的基础知识就很快记住了,并且基础知识也扎实了,他们也乐意学数学。今天老师就来给你们讲一个基础知识的原理:为什么一个锐角确定了,三角函数值就确定了,希望今天老师总结的知识对你有用。

首先我们来看一下下面的几个实例,得出原理。

通过上面的实例,我们知道当一个锐角是30度或45度时,它的对边比斜边一定是一个定值。那么对于锐角A的每一个确定的值,其对边与斜边的比值也是惟一确定的吗?接下来我们继续来研究。

通过上图中的研究我们知道:在直角三角形中,当锐角A的度数一定时,不管三角形的大小如何,∠A的对边与斜边的比也是一个固定值.在这里我们还引入了一个新的定义:正弦。在Rt△ABC中 ∠C=90 ,我们把锐角A的对边与斜边的比叫做∠ A的正弦,记作sinA。

刚才我们研究了对边比斜边,那接下来我们继续研究在直角三角形ABC中,∠C=90°,当∠A确定时,∠A的对边与斜边的比随之确定,此时,邻边与斜边的比及对边与邻边的比是否随之确定呢?为什么?请看下面的讲解:

通过上面的讲解,我们知道:在Rt△ABC中,在直角三角形中,当锐角A的度数一定时,不管三角形的大小如何, ∠A的∠A的邻边与斜边的比、 ∠A的对边与邻边的比是一个固定值.同时接下来,我们要引入新的两个定义:正切和余弦。

通过上面的讲解大家明白了为什么一个锐角确定了,三角函数值就确定了吧!其实一般的结论是根据相似得到的。请同学们认真看上面的讲解,把这个基础点理解,这对以后高中我们继续研究三角函数有着很重要的作用,讲到这里同学们可以课下做一下笔记,把证明三角函数的确定性整理一下,那这个知识点就明白了。最后希望老师今天分享的这个知识点对爱研究的你有所帮助。

 

来源: http://baijiahao.baidu.com/s?id=1640264048194315416

阅读全文

边边边定理证明

  categories:资料  author:

边边边定理

本词条由“科普中国”科学百科词条编写与应用工作项目 审核 。
边边边定理,简称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。

阅读全文

位似

  categories:资料  author:

位似

把幻灯片上的图形放大到屏幕上,形成的新图形和原图形就是典型的位似图形。

两个多边形不仅相似,而且对应顶点的连线相交于一点,并且对应边互相平行或位于同一直线上,像这样的两个图形叫做位似图形(homothetic figures),这个交点叫做位似中心,这时的相似比又称为位似比。 [1]
有必要声明,位似图形的标准定义应是:如果两个图形不仅是相似图形,且对应点连线相交于一点,对应线段相互平行,那么这样的两个图形叫做位似图形,位似图形对应点连线的交点是位似中心。

性质

位似图形的任意一对对应点与位似中心在同一直线上,它们到位似中心的距离之比等于相似比。

1.位似图形对应线段的比等于相似比。

2.位似图形的对应角都相等。
3.位似图形对应点连线的交点是位似中心。
4.位似图形面积的比等于相似比的平方。
5.位似图形高、周长的比都等于相似比。
6.位似图形对应边互相平行或在同一直线上。

作用

利用位似可以将一个图形任意放大或缩小。
位似中心的落点
位似图形的中心可以在任意的一点,不过位似图形也会随着位似中心的位变而位变。
根据一个位似中心可以作两个关于已知图形一定位似比的位似图形,这两个图形分布在位似中心的两侧,并且关于位似中心对称。
作图步骤 位似比,即位似图形的相似比,指的是要求画的新图形与参照的原图形的相似比
①首先确定位似中心,位似中心的位置可随意选择;
②确定原图形的关键点,如四边形有四个关键点,即它的四个顶点;
③确定位似比,根据位似比的取值,可以判断是将一个图形放大还是缩小;
④符合要求的图形不惟一,因为所作的图形与所确定的位似中心的位置有关,并且同一个位似中心的两侧各有一个符合要求的图形,最好做两个。
位似变换 把一个几何图形变换成与之位似的图形,叫做位似变换。物理中的透镜成像就是一种位似变换,位似中心为光心. 位似变换应用极为广泛,特别是可以证明三点共线等问题.

———————————–
1 位似图形
每幅图的两个 多边形 不仅相似,而且对应顶点的连线相交于一点,像这样的两个图形叫做位似图形(homothetic figures),这点叫做位似中心.

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

2 位似图形的性质


3 位似中心… 阅读全文

最全三角函数公式推导

  categories:资料  author:

零、写在前面

这只是闲着没事随便写着玩的,大家随便看看就行。

一、基本定义

设角[公式]的终边与单位圆交于点[公式],则有

[公式],[公式]

[公式],[公式]

[公式],[公式]

二、同角三角函数基本关系

由上边的式子可以直接得出以下三个关系式(倒数关系):

[公式]
[公式]
[公式]
还可以得出如下商的关系:

[公式][公式]
结合勾股定理,我们还可以得到下述平方关系:

[公式]
这些关系式很简单,就不推导了。

三、特殊值

1

当这篇文章读完之后,你一定可以推导出上表中任何一个值。

四、诱导公式

我不推荐大家记这个表

而是希望大家先熟悉一下最基本的三个三角函数(sin、cos和tan)的性质,然后再讨论遇到类似问题如何最快速地推导。

  • 正弦函数是奇函数,最小正周期为[公式],其导函数为余弦函数;
  • 余弦函数是偶函数,最小正周期为[公式],其导函数为正弦函数的相反数;
  • 正切函数是奇函数,最小正周期为[公式].

诱导公式的目的是什么呢?就是将[公式][公式]的整数倍去掉,仅保留[公式].因此我们可以按照上述性质一步步地化简:

  1. 按照其奇偶性,将[公式]变为负值;
  2. 根据正弦/余弦函数的周期性,将[公式]的整数倍全部去掉。若此时被加数为负,则再加上[公式]
  3. 若被加的数绝对值仍不小于[公式],就将其绝对值直接减去[公式],然后取负号;
  4. 利用公式[公式][公式]得出结果。
阅读全文

弧度是怎么来的?为何要用弧度?起源是什么

  categories:资料  author:

弧度是怎么来的?为何要用弧度?起源是什么?

角度

谈弧度,就必须先谈下角度,如果世界上只有弧度,没有角度,我相信大家也就不会疑惑为什么会有弧度制了。

角度为什么出现?

角度的出现,是源于对圆周运动的观察

1

这个世界上最大最显眼的圆周运动就是太阳,就算我们现代人知道地心说是错误的,可是以我们的尺度来说,抬头还是观察到太阳在做圆周运动。

作为观察者,我们也非常自然的,以我们为中心,开始计算太阳相对我们的移动,这就开始出现了角度。

圆周为什么是360°?

地球围绕太阳公转,而遥远的十二星座仿佛固定在圆柱形天幕上:

2

地球上的我们就像看走马灯一样,随着地球的公转,在特定的时间看到特定的星座。古人发现了这个规律,并且以星座为参照物,近似观察出循环周期为360天,也就是一年。

因此,天就被等分成了360份,也就是圆被等分成了360份。虽然后来古人慢慢发现了一年实际上是365天,但是因为360度已经成为习惯,并且非常好计算,所以就被保留了下来。

度数是圆周的占比

3

弧度

角度似乎已经足够描述圆周运动了,为什么要出现弧度?是来给世界添乱的吗?

弧度为什么出现?

弧度的出现,刚开始不过是个数学游戏。弧度=弧长/半径,对于相同的角度这个比值保持不变,所以可以看作角度的另一种表现形式。(其实“弦长/半径”也是定值,为啥不选这个作为弧度呢?可以想想。)

5

弧度有什么现实意义?

弧度是从圆周运动进行者的角度来看待圆周运动。

之前说过,古人的世界观是天圆地方,人们的旅行都被视为直线运动。欧式几何里面的直线笔直的延伸到无穷远处。

可是,事实是,地球是圆的,随着技术的发展,大航海时代的来临,大家越来越认识到这一点。传统意义上的直线,在地球表面都不复存在,必须重新定义直线的含义。

弧度也是在这样的环境下开始发扬光大:

6

知道了移动的角度,也就知道了经纬度,就可以通过地图进行导航,而利用弧度,大大简化了这一过程。

“海里”这个航海单位也是弧度在大航海时代的产物。

“海里”传统上定义为子午线1角分的长度。它可从航海图中,以子午线上的纬度的改变来量度。—-维基百科

7

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

9

这种转换有了之后,就可以很方便的测量汽车的直线速度了。汽车在车胎附近安装一个传感器,测出车胎的转速(比如10弧度/秒),乘以半径(比如1米),就得到了汽车的直线速度(这里就是10米/秒)。有的出租车换了更小直径的轮胎而不修改行车电脑里面的轮胎半径,就可以轻松的“偷里程”。所以,学习多么的重要啊!

弧度帮助理解重要极限

[公式] ,这是个很重要的极限,考试也会经常用到,但是他的几何意义是什么呢?

10

11

在现代数学中,弧度是最基本的概念

弧度使得角度和实数统一在了一起。对于 [公式] 这个函数而言,如果 [公式] 使用角度,就很难去理解这个方程,一边的单位是度,一边是无单位的实数。而使用弧度可以很好的解决这一问题,使得 [公式] 和 [公式] 都是无单位的数。

弧度开启了三角函数的大门。欧拉在他的著作《无穷小分析概论》就提出了弧度,并且作出了三角函数线(这也是非常有趣的概念,在这里就不展开了),通过弧度和三角函数线,第一次定义了三角函数!这也是欧拉在数学上的重大贡献之一。此时,三角分析才开始和函数这个有力的工具挂上钩。… 阅读全文

顶级程序员和普通程序员在思维模式上的5个区别!

  categories:资料  author:

《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.系统性的思考方式

当你在写代码的时候,你很容易就认为只要你按照需求实现了指定的功能,你的代码就写完了。但是这其实只是冰山一角。任何没有发布到生产环境的代码都不会产生任何价值。

如果想写出真正有影响力的代码,你需要从整个系统去理解你的工作:

  • 你的代码和其他人写的代码在功能上是什么关系?
  • 你有没有好好测试你的代码?或者其他人是否很容易测试你的代码?
  • 为了部署你的代码,线上生产环境的代码是不是需要改动?
  • 新的代码会不会影响到已经运行的代码?
  • 在新的功能下,你的目标用户的行为是不是你期望的?
  • 你的代码有没有产生商业上的影响?

这些问题都不是很容易就能回答的,但是在写代码的时候,你需要明白你的代码最后会不会得到最好的结果。… 阅读全文



快乐成长 每天进步一点点      京ICP备18032580号-1