CAS单点登录——使用自定义登录页面和数据源

使用CAS服务实现单点登录时,登录用的用户名和密码是通过在cas/WEB-INF下的cas-servlet.xml文件进行配置的,实际应用中,我们需要查询自己的数据库,来实现登录功能。

在cas中配置自定义数据源
  1. 修改cas服务端中web-inf下deployerConfigContext.xml ,添加如下配置
<!--配置登录要访问数据库的数据源,这里使用c3p0数据源-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
  p:driverClass="com.mysql.jdbc.Driver"
  p:jdbcUrl="jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8"
  p:user="root"
  p:password="123456" />
  
  
<!--配置加密器,因为用户表的密码是使用MD5加密的,如果密码没有加密,这里也不需要配置-->
<bean id="passwordEncoder" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder"
	c:encodingAlgorithm="MD5"
	p:characterEncoding="UTF-8" />
	
	
<!--配置认证处理者,在这里需要引入数据源和密码加密器,如果密码是明文,则不需要配置密码加密器-->
<!--这里还需要指定sql,要查询的表名和where条件-->
<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. 在deployerConfigContext.xml中找到如下配置
<bean id="authenticationManager" class="org.jasig.cas.authentication.PolicyBasedAuthenticationManager">
	<constructor-arg>
		<map>
			<entry key-ref="proxyAuthenticationHandler" value-ref="proxyPrincipalResolver" />
			<entry key-ref="primaryAuthenticationHandler" value-ref="primaryPrincipalResolver" />
		</map>
	</constructor-arg>
	<property name="authenticationPolicy">
		<bean class="org.jasig.cas.authentication.AnyAuthenticationPolicy" />
	</property>
</bean>

这段配置中 entry key-ref=“primaryAuthenticationHandler” value-ref="primaryPrincipalResolver"这一句的表示使用自己配置的用户名和密码登录cas,而需要使用数据库认证用户名和密码,则需要将这句注释,添加一个配置,使用自定义的数据源,修改后如下

<constructor-arg>
     <map> 
            <entry key-ref="proxyAuthenticationHandler" value-ref="proxyPrincipalResolver" />
            <!--<entry key-ref="primaryAuthenticationHandler" value-ref="primaryPrincipalResolver" />-->		<!--这个配置的意思就是使用配置文件配置的用户名和密码登录cas-->
			<entry key-ref="dbAuthHandler" value-ref="primaryPrincipalResolver"/>			<!--引入自定义的认证处理者,因为需要查询数据库-->
       </map>
 </constructor-arg>
  1. 因为配置数据源,需要c3p0和masql的驱动包,所以需要将这些jar包加入到webapps\cas\WEB-INF\lib目录下,jar包地址:
    链接:https://pan.baidu.com/s/1LzEb-wtH7YCO8MdQw4q7bA 提取码:lc1n
    三个jar包在里面的jar目录下

至此,就可以在登录的时候,使用自己数据库中tb_user表中的用户名和密码进行登录了,而原来配置的默认的用户名和密码也就无效了。

当我们使用cas来进行登录时,会默认使用它的登录页面,但是与我们自己的系统风格不一致,也没有那么美观,所以,这里需要将自己的登录页面,成为cas服务的登录页面

修改cas服务端的登录界面
  1. 将自己登录页面,拷贝到cas系统下WEB-INF\view\jsp\default\ui 目录下,将css,js,images等文件夹拷贝到 cas目录下,将原来的casLoginView.jsp 改名(可以为之后的修改操作做参照),将自己的login.html改名为casLoginView.jsp 。
  2. 因为自己的登录页面改成了jsp页面,所以需要加入jsp的头信息,因为原来的登录界面,引入了includes下的top.jsp界面,所以,我们只需要将top.jsp里面的jsp头信息,加入到新的casLoginView.jsp 中即可
<%@ page pageEncoding="UTF-8" %>
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
  1. 将自己的登录页面里面的form标签,input标签,登录标签都修改成原来的casLoginView.jsp页面里面的格式,因为要套用cas的内核。但是,这些标签的样式,还是需要用自己的。这里,还需要将原来的casLoginView.jsp中的三个隐藏域,也要复制过来
<input type="hidden" name="lt" value="${loginTicket}" />
<input type="hidden" name="execution" value="${flowExecutionKey}" />
<input type="hidden" name="_eventId" value="submit" />
  1. 都修改好之后,运行,就能使用自己的登录界面,并且使用自己数据库的用户名和密码登录成功。

当我们登录的时候,输入错误的用户名和密码时,不会有错误提示,所以,需要将cas的错误提示加入进去

加入错误提示
  1. 在表单内加入错误提示框(位置可以由自己决定)
  <form:errors path="*" id="msg" cssClass="errors" element="div" htmlEscape="false" />
  1. 输入错误的用户名和密码,提示是英文。这个提示信息是在WEB-INF\classes目录下的messages.properties文件中
authenticationFailure.AccountNotFoundException=Invalid credentials.
authenticationFailure.FailedLoginException=Invalid credentials.
  1. 需要将错误提示改成中文,所以修改cas-servlet.xm
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver" p:defaultLocale="zh_CN" />

p:defaultLocale="zh_CN"这里默认配置的是en,表示英文,这里要改成zh_CN,表示简体中文

  1. 在WEB-INF\classes目录下,找到messages_zh_CN.properties,加入配置
authenticationFailure.AccountNotFoundException=\u7528\u6237\u540D\u6216\u5BC6\u7801\u9519\u8BEF.
authenticationFailure.FailedLoginException=\u7528\u6237\u540D\u6216\u5BC6\u7801\u9519\u8BEF.

这里需要加入中文的转码,系统才能识别,这里的转码含义是:用户名或密码不存在,如果需要其他的错误提示,可以修改,但是一定要是中文转码。

  1. 都修改之后,再次登录输入错误的信息,就能在登录页面看到:用户名或密码错误的提示信息。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值