CAS环境搭建-单点登陆教程(一)

依赖

  • JDK
  • maven
  • tomcat

下载

从CAS网站下载最新版本的CAS 源代码. CAS Server 3.5.2 Release,  可以看到版本号已经到3.5.2. 解压之后看到包结构如下:

 

编译

可以看出CAS源代码是使用maven构建的,  非常方便二次开发. 现在我们仅仅需要一个web服务端的服务. 切换到命令行进入到目录: cas-server-3.5.2/cas-server-webapp: 执行:

[jason@localhost cas-server-webapp]$ mvn install

等待…….时间取决与你的网速,不过应该不会太快. 编译成功后将进入target目录.看到如下结果:

-rw-rw-r--. 1 jason jason 77636 Jun 9 14:49 cas-classes.jar
drwxrwxr-x. 8 jason jason 4096 Jun 9 14:49 cas-server-webapp-3.5.2
-rw-rw-r--. 1 jason jason 33894720 Jun 9 14:49 cas.war
drwxrwxr-x. 4 jason jason 4096 Jun 9 14:48 classes
drwxrwxr-x. 4 jason jason 4096 Jun 9 14:48 generated-sources
drwxrwxr-x. 2 jason jason 4096 Jun 9 14:49 maven-archiver
drwxrwxr-x. 2 jason jason 4096 Jun 9 14:55 surefire
drwxrwxr-x. 2 jason jason 4096 Jun 9 14:49 surefire-reports
drwxrwxr-x. 4 jason jason 4096 Jun 9 14:48 test-classes

部署

直接将 cas-server-webapp-3.5.2目录修改为cas,  复制到tomcat所在目录 webapp/ 下.

执行bin/startup.sh 启动启动tomcat.

 

测试

访问 http://127.0.0.1:8080/cas/login 进行测试.看到如下页面证明部署成功!

 

更多关于CAS配置信息, 请参考下一章节内容.

 

本文章属于原创性文章,如有转载请注名原文地址: http://jasonli.info/2013/06/09/cas-deployment/

发表在 单点登陆 | 标签为 , , | 留下评论

chrome浏览器上使用vim-vimium插件

如果你是个Vimer,赶快尝试下载chrome浏览器上使用vim的感觉吧。安装插件vimium (如果你访问不了,请先翻墙之,推荐使用goagent,加入goagent都打不开,请点击 这里 下载). 安装过程和其他插件一样,完毕之后可以通过键盘来控制chrome了, 看下面操作:
  • 当前页面:
d 向下滚动半页
u 向上滚动半页
j 向下滚动一行,与vim一样.
k 向下滚动一行 
gg 跳到最上
G 跳到最下
f 这个比较有用,会显示页面链接对应的按键. 按下键盘后打开对应链接
F 和 f 一样,不过是打开新标签页面
r 刷新页面
gs 查看源码
yy 复制当前地址
  • 新页面:
o 在当前页面打开地址、书签或历史
O 在新开标签打开地址、书签或历史
b 在当前页面打开书签
B 在新开标签打开书签
H 后退
L 前进
  • 控制标签
J, gT 左移一个标签
K, gt 右移一个标签
g0 转到第一个标签
g$ 转到最后一个标签t 打开一个新标签
x 关闭当前标签
X 恢复上一次关闭标签
T 搜索标签

最后,使用 ? (问号)键可以打开帮助页面。赶快试试chrome上的键盘流吧!

发表在 工具 | 标签为 , , , | 留下评论

修改maven默认输出目录

使用Maven时候默认的输出目录是 {workspace}/target, 在编译之后maven会将产出放到该目录,如果想修改target,可以通过一下方式:

在pom.xml 中的<build>节点加入:

<build>
...
<directory>output</directory>
</build>

 

已经将输出目录修改成output,重新执行mvn install 尝试下一下。

 

发表在 maven, 工具 | 标签为 | 留下评论

一年又一年,人生如白驹过隙。回顾2012我感慨万千,经历了一次不怎么成功的创业历程,让我成长了许多。正所谓:凡事预则立,不立则废。2013年我需要一个计划去实现价值:

  1. 坚持学习英语,参加并通过雅思考试,时间点3月20日(春分)。
  2. 每月完成2篇有深度的技术博客。
  3. 发布个人开源项目到Github,时间点3月1日
年度目标:
  1. 娶媳妇
  2. 提交技术移民
希望属于我的2013能够顺利,努力~
发表于 jason | 2 条评论

一个好看的Xshell颜色方案(转)

发表在 linux | 标签为 , | 留下评论

程序员如何经营知识财产

作为一名苦命程序员,人们眼中的IT民工。知识资产是核心价值。但是技术变化莫测,如何才能经营好自己的知识财产,而不至于路越走越窄。以至于30岁之后面临五路可走的悲催境地。知识也是财产,也需要经营。就像理财一样,通货膨胀会让我们现有的技术能力贬值,所以用理财的态度对待自己的知识财产。

1 定期投资,就像金融投资一样,你必须顶起为你的知识资产投资。即使投资量很小,习惯自身和总量一样重要。每年至少学习一门新语言;每季度阅读一本技术书籍。

2 多元化。了解不同事情,从CSS样式到数据库优化知识。知道不同的事情越多,你就越有价值。被公司抛弃的概率也越小,因为你随时可以转向一个稀缺的岗位,而不是只能做一件事(如果这件事对于公司没有价值了,你就危险了)。不要假想大公司是每个人只做一件事的,因为大公司也是分部门的,每个部门又会分成若干个组,每组的人数规模很小,所以了解的越多,对于团队价值越大。

3 低买高卖,和买股票一样,在低的价格买入,你会获得的收益可能性越大。在行业还没有流行之前,也许会有风险。但是风险越大,收益越大。比如,在android开发刚出现的时候学习可能有很大风险,但是对于现在已步入该领域的人可能已经是行业稀缺资源,所以获得的回报也非常大(3年经验的android开发者已经视为专家了噢)。

以上内容是我从书中获取到的经验,希望能写出来希望和大家共勉。

发表在 学习 | 标签为 , | 留下评论

有关数据库事务说明

事务,是保证系统完成一组访问操作时候,让系统始终处于“正确”的状态。为了保证事务执行前后,数据资源所承载的系统始终处于“正确”的状态,事务有4个限定属性。ACID即:

原子性(Atomicity),要求事务所包含的全部操作是一个不可分割的整体,这些整体要么全部提交成功,要么全部失败。 如果把整个事务操作好比变形金刚合体,一荣俱荣一损俱损。

一致性(Consistency) :要求事务所包含的操作不能违反一致性检查,在事务执行之前处于某个一致性状态,那么,执行之后依然保持数据间的一致性状态。比如我在银行有2个账户,储蓄卡账户4万元,信用卡1万元,总计5万元。如果我从储蓄卡转账1万元到信用卡,则储蓄卡剩余3万元,信用卡2万元,总计依然是万元。如果事务结束后,数据状态不是这样,那么就说数据处于不一致性状态。

 隔离性(Isolcation ):主要规定了各个事务之间的互相影响。隔离性主要面向数据资源的并发访问,并兼顾影响事务的一致性,事务制定4种类型的隔离级别,在介绍隔离级别前先介绍3种常见的问题:

  • 脏读,如果一个事务对数据进行了更新,但事务还提交时,另一个事务取到了更新结 果。 加入第一个事务由于异常回滚,则第二个事务读到了一笔脏数据。如下图:
  • 不可重复读,是指同一个事务整个过程中对同一笔数据进行读取,每次结果都不同。如果事务1在事务2之前读取一次,在事务2更新之后又读取一次,两次结果是不同的。如下图:
  • 幻读 : 指同样一个查询在整个事务多次执行后,查询所得的结果不一样。幻读针对的是多笔记录。如下图:
  1. Read uncommitted, 最低的级别,一个事务可以读取另一个未完成事务数据来寻求较高的性能。此级别会同时引起,脏读,不可重复读,幻读。
  2. Read committed,是大部分数据采用的默认隔离级别,比上一个级别具有更高的限定。使用此级别,一个事务的更新结果只有在该事务提交之后,另一个事务才能读取到更新结果。此级别会引起不可重复读,幻读
  3. Repeatable Read, 此隔离级别是可以保证在整个事务过程中,对同一笔数据读取结果是相同的。不管其他事务是否同时进行更新。也不管其他事务是否对同一数据更新提交。此级别可避免不可重复读但是不能避免幻读。
  4. Serializable ,最高的隔离级别,所有事务都将顺序执行,可以避免遇到的所有问题,是最安全的隔离级别,但是性能最差。因为所有事务顺序执行,并发下降,服务吞吐量减少。很少有场景能使用到此级别。
隔离级别一览表:

名称

脏读

不可重复读

幻读

Read uncommitted

Read committed

-

Repeatable Read

-

-

Serializable

-

-

-

持久性(Durability) :指一旦整个事务操作成功提交,对数据所做的变更将被记载并不可逆转具有持久性。

总结:

数据库的隔离级别决定事务类型,大多数情况我们使用的都是Read committed,比如oracle和mysql。但并是所有的数据都支持这四中级别,比如oracle就只有Read committed 和Serializable 两种可以选择。不同的级别会影响并发性,一般来说隔离级别和并发成反比,和数据一致性成正比。也就说,事务隔离级别越高,系统并发性越差,系统性能就越差。不过隔离度越高,数据一致性越好。

资料来源:http://en.wikipedia.org/wiki/Isolation_(computer_science)

 

发表在 数据库 | 标签为 , , , | 留下评论

ssh: connect to host localhost port 22: Connection refused

使用ssh( ssh localhost)链接本机时候,会出现如下错误:

ssh: connect to host localhost port 22: Connection refused

有2个原因导致此结果:

1 没有安装openssh-server,解决方法:

Ubantu:

sudo apt-get install openssh-server
Fedora:
sudo yum install openssh-server

2 安装了openssh-server,但是没有启动服务进程, 解决方法:

sudo service sshd start

发表在 linux | 标签为 , | 留下评论

rsync 的核心算法

rsync是unix/linux下同步文件的一个高效算法,它能同步更新两处计算机的文件与目录,并适当利用查找文件中的不同块以减少数据传输。rsync中一项与其他大部分类似程序或协定中所未见的重要特性是镜像是只对有变更的部分进行传送。rsync可拷贝/显示目录属性,以及拷贝文件,并可选择性的压缩以及递归拷贝。rsync利用由Andrew Tridgell发明的算法。这里不介绍其使用方法,只介绍其核心算法。我们可以看到,Unix下的东西,一个命令,一个工具都有很多很精妙的东西,怎么学也学不完,这就是Unix的文化啊。

本来不想写这篇文章的,因为原先发现有很多中文blog都说了这个算法,但是看了一下,发现这些中文blog要么翻译国外文章翻译地非常烂,要么就是介绍这个算法介绍得很乱让人看不懂,还有错误,误人不浅,所以让我觉得有必要写篇rsync算法介绍的文章。(当然,我成文比较仓促,可能会有一些错误,请指正)

问题

首先, 我们先来想一下rsync要解决的问题,如果我们要同步的文件只想传不同的部分,我们就需要对两边的文件做diff,但是这两个问题在两台不同的机器上,无法做diff。如果我们做diff,就要把一个文件传到另一台机器上做diff,但这样一来,我们就传了整个文件,这与我们只想传输不同部的初衷相背。

于是我们就要想一个办法,让这两边的文件见不到面,但还能知道它们间有什么不同。这就出现了rsync的算法。

算法

rsync的算法如下:(假设我们同步源文件名为fileSrc,同步目的文件叫fileDst

 

1)分块Checksum算法。首先,我们会把fileDst的文件平均切分成若干个小块,比如每块512个字节(最后一块会小于这个数),然后对每块计算两个checksum,

  • 一个叫rolling checksum,是弱checksum,32位的checksum,其使用的是Mark Adler发明的adler-32算法,
  • 另一个是强checksum,128位的,以前用md4,现在用md5 hash算法。

为什么要这样?因为若干年前的硬件上跑md4的算法太慢了,所以,我们需要一个快算法来鉴别文件块的不同,但是弱的adler32算法碰撞概率太高了,所以我们还要引入强的checksum算法以保证两文件块是相同的。也就是说,弱的checksum是用来区别不同,而强的是用来确认相同。(checksum的具体公式可以参看这篇文章

2)传输算法。同步目标端会把fileDst的一个checksum列表传给同步源,这个列表里包括了三个东西,rolling checksum(32bits)md5 checksume(128bits)文件块编号

我估计你猜到了同步源机器拿到了这个列表后,会对fileSrc做同样的checksum,然后和fileDst的checksum做对比,这样就知道哪些文件块改变了。

但是,聪明的你一定会有以下两个疑问:

  • 如果我fileSrc这边在文件中间加了一个字符,这样后面的文件块都会位移一个字符,这样就完全和fileDst这边的不一样了,但理论上来说,我应该只需要传一个字符就好了。这个怎么解决?
  • 如果这个checksum列表特别长,而我的两边的相同的文件块可能并不是一样的顺序,那就需要查找,线性的查找起来应该特别慢吧。这个怎么解决?

很好,让我们来看一下同步源端的算法。

3)checksum查找算法。同步源端拿到fileDst的checksum数组后,会把这个数据存到一个hash table中,用rolling checksum做hash,以便获得O(1)时间复杂度的查找性能。这个hash table是16bits的,所以,hash table的尺寸是2的16次方,对rolling checksum的hash会被散列到0 到 2^16 – 1中的某个整数值。(对于hash table,如果你不清楚,建议回去看大学时的数据结构教科书)

顺便说一下,我在网上看到很多文章说,“要对rolling checksum做排序”(比如这篇这篇),这两篇文章都引用并翻译了原作者的这篇文章,但是他们都理解错了,不是排序,就只是把fileDst的checksum数据,按rolling checksum做存到2^16的hash table中,当然会发生碰撞,把碰撞的做成一个链表就好了。这就是原文中所说的第二步——搜索有碰撞的情况。

4)比对算法。这是最关键的算法,细节如下:

4.1)取fileSrc的第一个文件块(我们假设的是512个长度),也就是从fileSrc的第1个字节到第512个字节,取出来后做rolling checksum计算。计算好的值到hash表中查。

4.2)如果查到了,说明发现在fileDst中有潜在相同的文件块,于是就再比较md5的checksum,因为rolling checksume太弱了,可能发生碰撞。于是还要算md5的128bits的checksum,这样一来,我们就有 2^-(32+128) = 2^-160的概率发生碰撞,这太小了可以忽略。如果rolling checksum和md5 checksum都相同,这说明在fileDst中有相同的块,我们需要记下这一块在fileDst下的文件编号

4.3)如果fileSrc的rolling checksum 没有在hash table中找到,那就不用算md5 checksum了。表示这一块中有不同的信息。总之,只要rolling checksum 或 md5 checksum 其中有一个在fileDst的checksum hash表中找不到匹配项,那么就会触发算法对fileSrc的rolling动作。于是,算法会住后step 1个字节,取fileSrc中字节2-513的文件块要做checksum,go to (4.1) - 现在你明白什么叫rolling checksum了吧。

4.4)这样,我们就可以找出fileSrc相邻两次匹配中的那些文本字符,这些就是我们要往同步目标端传的文件内容了。

图示

怎么,你没看懂? 好吧,我送佛送上西,画个示意图给你看看(对图中的东西我就不再解释了)。

这样,最终,在同步源这端,我们的rsync算法可能会得到下面这个样子的一个数据数组,图中,红色块表示在目标端已匹配上,不用传输(注:我专门在其中显示了两块chunk #5,相信你会懂的),而白色的地方就是需要传输的内容(注意:这些白色的块是不定长的),这样,同步源这端把这个数组(白色的就是实际内容,红色的就放一个标号)压缩传到目的端,在目的端的rsync会根据这个表重新生成文件,这样,同步完成。

最后想说一下,对于某些压缩文件使用rsync传输可能会传得更多,因为被压缩后的文件可能会非常的不同。对此,对于gzip和bzip2这样的命令,记得开启 “rsyncalbe” 模式。

(以上内容转载自酷壳 – CoolShell.cn ,原文地址:http://coolshell.cn/articles/7425.html)

发表在 linux | 标签为 | 留下评论

Linux qq 无法输入中文

众所周知腾讯的qq for linux 的版本一直是1.0,从来没更新过。而mac版的qq则频繁更新,不得不鄙视一下腾讯。这个大的公司开发一个linux下的qq有那么难吗?只能说腾讯根本不重视linux的用户,而使用mac“高富帅”的才是人家的上帝啊!好吧,暂停吐槽切入正题。

由于默认从腾讯官网上下载的qq for linux 是32位版本的,所以如果你的机器安装的是64位linux就会出现一个诡异而严重的问题,不能输入中文。解决方法如下:

首先,切入到root用户下,执行下面2个命令:

yum install gtk2-immodule-xim.i686
yum install ibus-gtk2.i686

然后,修改文件/usr/bin/qq

#!/bin/sh
export GTK_PATH="/usr/lib/gtk-2.0/2.10.0/"
export GTK_IM_MODULE=xim
export GDK_NATIVE_WINDOWS=true
cd /usr/share/tencent/qq/
./qq

修改完毕后重新登录qq就可以输入中文了~,话说大部分人喜欢使用webqq,不过还是喜欢桌面版的qq,毕竟还有一些传输文件,截屏幕等功能还是满方便的。

发表在 Fedora, linux, 工具 | 标签为 | 留下评论