单点登录解决方案——CAS设置

1. 服务端数据源配置

1.1 从配置文件配置

这种方式比较简单,就是在CAS服务端的WEB-INF目录下的部署上下文配置文件deployerConfigContext.xml中,给id=primaryAuthenticationHandler的bean添加一个属性,如图:

1.2 从数据库读取

        从配置文件配置简单方便,但是局限性很大,我们在实际开发中几乎不使用该方式,而是使用从数据库读取的方式来配置数据源。

        我们知道在cas服务端的部署上下文配置文件deployerConfigContext.xml中,通过id="primaryAuthenticationHandler"的bean可以配置数据源信息(用户名和密码),但是我们发现primaryAuthenticationHandler也是认证管理器(id=authenticationManager)的一个引用属性,如图;

从中,我们可以知道,要实现从数据库中读取并配置数据源信息,其实就是相当于换掉id="primaryAuthenticationHandler"的bean,也就是让这个bean动态的生成。

这时候,我们需要在部署配置文件中新增如下三个配置:

1)数据库连接信息配置

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"  
			  p:driverClass="com.mysql.jdbc.Driver"  
			  p:jdbcUrl="jdbc:mysql://127.0.0.1:3306/casTestDB?characterEncoding=utf8"  
			  p:user="root"  
			  p:password="root" />

2)数据库认证处理器

<bean id="dbAuthHandler"  
		  class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"  
		  p:dataSource-ref="dataSource"  
		  p:sql="select password from tb_user where username = ?"  
		  p:passwordEncoder-ref="passwordEncoder"/>

注意:

1. p:dataSource-ref:配置关联的数据源

2. p:sql的SQL语句根据实际情况写,这句话的意思是,根据用户名查询数据中记录的密码

3.p:passwordEncoder-ref:密码加密适配器,如果数据库中存储的是明文,例如:123456这样的密码,就不需要配这个,如果存储的是密文,就需要配置这个。

3)密码加密适配器

<bean id="passwordEncoder" 
class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder"  
		c:encodingAlgorithm="MD5"  
		p:characterEncoding="UTF-8" />

注意:

1. 如果数据库认证处理器没有引用密码加密适配器,这个就不需要配置,如果数据库认证处理器没有引用加密适配器,就表示数据库中存储的密码是明文,所以也不需要加密适配了。

2. c:encodingAlgorithm:指定加密算法,与数数据库密码加密算法要一致

3. p:characterEncoding:指定字符集编码

配置新增完毕之后,我们还需要更改认证管理器器authenticationManager的引用为我们配置的数据库认证处理器dbAuthHandler

如图;

最后添加三个jar文件(c3p0、cas的jdbc支持jar、mysql驱动包),下载链接:i7d2

将这三个jar放到cas/WEB-INF/lib目录下即可。

2. CAS服务端界面改造

我们要更改CAS的登录界面为我们自己的界面,这时候,就需要知道CAS的登录界面在哪里,CAS的登录界面就位于cas\WEB-INF\view\jsp\default\ui目录下,文件名为casLoginView.jsp

2.1 登录界面改造

操作步骤;

1)找到casLoginView.jsp文件

2)将我们自己的login页面拷贝到与casLoginView.jsp所在的目录

3)将我们的页面名字改成casLoginView.jsp。

注意;如果我们的login页面是HTML页面,那么我们可以先打开原来的casLoginView.jsp,找到其中的jsp指令,复制到我们的login.html中,在原来的登录界面中有一个include指令,该指令引用的是top.jsp文件,该文件中引入的指令就是我们需要的,直接将该指令拷贝到login.html,如图;

输入网址,如图;

已经,替换成功,这时候,我们在引入我们的样式文件等,注意:我们的文件要放在CAS服务的根目录下,不能放在WEB-INF目录下,否则,无法识别,加入样式之后的登录效果

4)实现了页面的替换之后,我们还需要修改我们的登录界面,将我们的表单替换成CAS的

A. 替换form表单,将我们自己的login页面的form替换成CAS的form

<form:form class="sui-form" method="post" id="fm1" commandName="${commandName}" htmlEscape="true">

注意;class="sui-form"是我们自己的表单样式

B. 替换用户名和密码输入框

将原来的用户名和密码输入框复制到我们的页面处,然后添加我们自己的样式,如图:

C. 替换登录按钮

看之前的登录界面的登录按钮,可以看到,其中有三个隐藏域,第一个input就是票据隐藏域,所以,我们同时还需要拷贝这三个隐藏域到我们的界面,如图:

至此,整个登录界面的替换就完成了。

2.2 错误信息提示

操作步骤:

1)将原来的登录界面的错误提示标签拷贝到咱们自己的登录界面,如图:

我们输入错误的用户和密码,效果如下:

我们发现,默认的错误提示是英文的,现在来修改成中文的。

2)在CAS中,对于提示信息都是在cas\WEB-INF\classes下配置文件中编写好的,主路口文件是messages.properties,如图所示,在该文件中有用户名和密码的错误提示信息

那么,我们是不是将这两句的提示信息改成中文了,答案是否定的,在CAS中做了C18N国际化处理,所以,我们需要将这两句话复制到 目录下的messages_zh_CN.properties中,将错误提示信息改成“用户名或者密码错误”,如图;

保存文件。这样配置好是否可以了?也是否定的,因为我们还需要更改CAS服务端的配置文件,让CAS默认读取message_zh_CN.properties文件才行。

注意:这里的中文提示需要使用图所示的转义字符,可以在eclipse中新建一个properties文件,在里面输入中文字符,默认就给转换了,然后直接复制粘贴过来即可。

3)修改cas/WEB-INF/cas-servlet.xml文件,搜索"en",找到如图所示的地方

将en改成zh_CN,如图:

注意zh_CN的大小写。

测试效果如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值