CAS单点登录——使⽤⾃定义登录页⾯和数据源
使⽤CAS服务实现单点登录时,登录⽤的⽤户名和密码是通过在cas/WEB-INF下的l⽂件进⾏配置的,实际应⽤中,我们需要查询⾃⼰的数据库,来实现登录功能。
在cas中配置⾃定义数据源
1. 修改cas服务端中web-inf下l ,添加如下配置
<!--配置登录要访问数据库的数据源,这⾥使⽤c3p0数据源-->
<bean id="dataSource" class="hange.v2.c3p0.ComboPooledDataSource"
p:driverClass="sql.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"/>
2. 在l中到如下配置
<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>
3. 因为配置数据源,需要c3p0和masql的驱动包,所以需要将这些jar包加⼊到webapps\cas\WEB-INF\lib⽬录下,jar包地址:
链接: 提取码:lc1n
三个jar包在⾥⾯的jar⽬录下
⾄此,就可以在登录的时候,使⽤⾃⼰数据库中tb_user表中的⽤户名和密码进⾏登录了,⽽原来配置的默认的⽤户名和密码也就⽆效了。
当我们使⽤cas来进⾏登录时,会默认使⽤它的登录页⾯,但是与我们⾃⼰的系统风格不⼀致,也没有那么美观,所以,这⾥需要将⾃⼰的登录页⾯,成为cas服务的登录页⾯
修改cas服务端的登录界⾯web端登录
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="java.sun/jsp/jstl/core" %>
<%@ taglib prefix="spring" uri="/tags" %>
<%@ taglib prefix="form" uri="/tags/form" %>
<%@ taglib prefix="fn" uri="java.sun/jsp/jstl/functions" %>
3. 将⾃⼰的登录页⾯⾥⾯的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" />
4. 都修改好之后,运⾏,就能使⽤⾃⼰的登录界⾯,并且使⽤⾃⼰数据库的⽤户名和密码登录成功。
当我们登录的时候,输⼊错误的⽤户名和密码时,不会有错误提⽰,所以,需要将cas的错误提⽰加⼊进去
加⼊错误提⽰
1. 在表单内加⼊错误提⽰框(位置可以由⾃⼰决定)
<form:errors path="*" id="msg" cssClass="errors" element="div" htmlEscape="false" />
2. 输⼊错误的⽤户名和密码,提⽰是英⽂。这个提⽰信息是在WEB-INF\classes⽬录下的messages.properties⽂件中
authenticationFailure.AccountNotFoundException=Invalid credentials.
authenticationFailure.FailedLoginException=Invalid credentials.
3. 需要将错误提⽰改成中⽂,所以修改
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver" p:defaultLocale="zh_CN" />
p:defaultLocale="zh_CN"这⾥默认配置的是en,表⽰英⽂,这⾥要改成zh_CN,表⽰简体中⽂
4. 在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.
这⾥需要加⼊中⽂的转码,系统才能识别,这⾥的转码含义是:⽤户名或密码不存在,如果需要其他的错误提⽰,可以修改,但是⼀定要是中⽂转码。
5. 都修改之后,再次登录输⼊错误的信息,就能在登录页⾯看到:⽤户名或密码错误的提⽰信息。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。