您好,欢迎来到宝玛科技网。
搜索
您的当前位置:首页jasigCAS实现单点登录(数据库认证)

jasigCAS实现单点登录(数据库认证)

来源:宝玛科技网


这个CAS( Central Authentication Service )是耶鲁大学的开源项目,旨在实现企业应用单点登录,还是很不错的,牛b的大学确实不一样,不是我们这些2b学校式的教育。其官网http://www.jasig.org/cas,很不幸,应该翻了墙才能进去,自己去捣鼓吧,建议就GoA

这个CAS(Central Authentication Service)是耶鲁大学的开源项目,旨在实现企业应用单点登录,还是很不错的,牛b的大学确实不一样,不是我们这些2b学校式的教育。其官网http://www.jasig.org/cas,很不幸,应该翻了墙才能进去,自己去捣鼓吧,建议就GoAgent足已。

  • 实验环境:
  • 1 1.jdk7_45

    2 2.tomcat7_45

    3 3.三台虚拟机:

    4 1.tomcat1(部署cas验证服务器)

    5 2.tomcat2(其中部署了两个web应用cas-web-client, cas-web-client2)

    6 3.mysql server一台(直接到数据库种验证)

  • 原理图:

  • 资源下载地址:
  • http://downloads.jasig.org/

    解压之,jar会再modules目录下,其他都为源代码项目

    已经打包的server:

    client:

    ------------------------------------------------------

    开始搭建:

  • CAS服务器配置:
  • 1.在tomcat1所在机器生成证书:

    这时会在用户主目录下生成.keystore文件,这个文件也可在上述命令种指定,其中生成过程会填入一些信息,注意输入第一个时(名字与姓氏)就输入你本机器的域名(不能时IP), 这里我的是www.tomcat1.com:

    2.导出证书(后面将其导入客户端的jre环境中):

    于是在用户主目录下就有了ssotest.crt证书文件(保留着,待会客户端配置要用),

    3.配置Tomcat SSL: ${TOMCAT_HOME}/conf/server.xml中83-93行修改为:

    01

    02 This connector uses the JSSE configuration, when using APR, the

    03 connector should be using the OpenSSL style configuration

    04 described in the APR documentation -->

    05

    06 <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"

    07 maxThreads="150" scheme="https" secure="true"

    08 clientAuth="false" sslProtocol="TLS"

    09 keystoreFile="/home/tomcatadmin/.keystore"

    10 keystorePass="ssotest"/>

    4.将上面下载资源中的cas-server-webapp-3.5.2.war改名为cas.war, 复制到${TOMCAT_HOME}/webapps/下,启动tomcat,这时进入https://www.tomcat1.com:8443/cas/, 见下图,则服务端已经配置ok:

    这时输入用户名及密码(保持一样就可以,默认CAS验证方式只要用户名密码一样就行), 可见其默认验证实现类SimpleTestUsernamePasswordAuthenticationHandler:

    01 public final class SimpleTestUsernamePasswordAuthenticationHandler extends

    02 AbstractUsernamePasswordAuthenticationHandler {

    03

    04 public boolean authenticateUsernamePasswordInternal(final UsernamePasswordCredentials credentials) {

    05 final String username = credentials.getUsername();

    06 final String password = credentials.getPassword();

    07

    08 if (StringUtils.hasText(username) && StringUtils.hasText(password)

    09 && username.equals(getPasswordEncoder().encode(password))) {//用户名及密码相同就成功

    10 return true;

    11 }

    12 return false;

    13 }

    14 }

    这样CAS服务端就默认配置完毕了,待会儿我们还要配置数据库验证。

  • 配置web客户端:
  • 1.生成.keystore(同上);

    2.将CAS服务端的导出ssotest.crt证书拷贝到某目录,并且导入到客户端机器的jre运行环境中:

    1 keytool -import -keystore $JAVA_HOME/jre/lib/security/cacerts -file ~/ssotest.crt -alias ssotest

    2 # NOTE: 有可能会有异常:java.io.IOException: Keystore was tampered with, or password was incorrect. 那就先删除本机上述的cacerts文件。

    3.配置客户端Tomcat SSL(同上);

    4.新建WEB项目cas-web-client, 并加入依赖包:cas-client-core-3.2.1.jar,commons-logging-1.1.jar

    5.配置web.xml:

    01 xml version="1.0" encoding="UTF-8"?>

    02 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">

    03 <display-name>cas-web-client2display-name>

    04 <listener>

    05 <listener-class>

    06 org.jasig.cas.client.session.SingleSignOutHttpSessionListener

    07 listener-class>

    08 listener>

    09 <filter>

    10 <filter-name>CasSingleSignOutFilterfilter-name>

    11 <filter-class>org.jasig.cas.client.session.SingleSignOutFilterfilter-class>

    12 filter>

    13 <filter-mapping>

    14 <filter-name>CasSingleSignOutFilterfilter-name>

    15 <url-pattern>/*url-pattern>

    16 filter-mapping>

    17 <filter>

    18 <filter-name>CASFilterfilter-name>

    19 <filter-class>org.jasig.cas.client.authentication.AuthenticationFilterfilter-class>

    20 <init-param>

    21 <param-name>casServerLoginUrlparam-name>

    22 <param-value>https://www.tomcat1.com:8443/cas/loginparam-value>

    23 init-param>

    24 <init-param>

    25 <param-name>serverNameparam-name>

    26 <param-value>http://www.tomcat2.com:8080param-value>

    27 init-param>

    28 filter>

    29 <filter-mapping>

    30 <filter-name>CASFilterfilter-name>

    31 <url-pattern>/*url-pattern>

    32 filter-mapping>

    33 <filter>

    34 <filter-name>CasTicketFilterfilter-name>

    35 <filter-class>

    36 org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilterfilter-class>

    37 <init-param>

    38 <param-name>casServerUrlPrefixparam-name>

    39 <param-value>https://www.tomcat1.com:8443/casparam-value>

    40 init-param>

    41 <init-param>

    42 <param-name>serverNameparam-name>

    43 <param-value>http://www.tomcat2.com:8080param-value>

    44 init-param>

    45 filter>

    46 <filter-mapping>

    47 <filter-name>CasTicketFilterfilter-name>

    48 <url-pattern>/*url-pattern>

    49 filter-mapping>

    50 <filter>

    51 <filter-name>CasRequestWrapFilterfilter-name>

    52 <filter-class>

    53 org.jasig.cas.client.util.HttpServletRequestWrapperFilterfilter-class>

    54 filter>

    55 <filter-mapping>

    56 <filter-name>CasRequestWrapFilterfilter-name>

    57 <url-pattern>/*url-pattern>

    58 filter-mapping>

    59 <filter>

    60 <filter-name>AssertionThreadLocalFilterfilter-name>

    61 <filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilterfilter-class>

    62 filter>

    63 <filter-mapping>

    <filter-name>AssertionThreadLocalFilterfilter-name>

    65 <url-pattern>/*url-pattern>

    66 filter-mapping>

    67 <welcome-file-list>

    68 <welcome-file>index.jspwelcome-file>

    69 welcome-file-list>

    70 web-app>

    这样cas-web-client就完成了,拷贝一份为另一个web客户端cas-web-client2:


    启动Cas Server所在tomcat(Tomcat1),再启动web客户端所在tomcat(Tomcat2),此时我们访问两个web客户端:

    http://www.tomcat2.com:8080/cas-web-client/index.jsp

    http://www.tomcat2.com:8080/cas-web-client2/index.jsp

    都会被重定想到CAS Server登录界面,登录成功其中之一(将看到对应的index.jsp),再刷新另一个(也能看到对应的index.jsp了,因为已经登录过了), 这就算服务端和客户端都配置OK了。

    ------------------------------------------------------

  • 现在就是要定制我们自己的验证方式(基于数据库验证):
  • 1.新建WEB项目cas-auth-server,你需要将cas-server-webapp-3.5.2.war中的资源对应拷贝到项目中,再把下载包中cas-server-webapp的源码考到项目中,由于基于数据库验证,还得将cas-server-support-jdbc-3.5.2.jar和mysql-connector驱动包拷贝到WEB-INF/lib目录下,这样就构成了纯净的cas server项目,当然你也可以通过maven去构建,官网也有说明,如图:

    2.我们要做的是修改一些配置,就是WEB-INF/deployerConfigContext.xml文件,先配置mysql数据源:

    1

    2 <bean id="mysqlDataSource" class="org.apache.commons.dbcp.BasicDataSource">

    3 <property name="driverClassName" value="com.mysql.jdbc.Driver" />

    4 <property name="url" value="jdbc:mysql://192.168.141.129:3306/blog?useUnicode=true&characterEncoding=utf-8"/>

    5 <property name="username" value="mysqladmin" />

    6 <property name="password" value="mysqladmin" />

    7 bean>

    3.修改 authenticationManager bean的属性 authenticationHandlers:

    01 <property name="authenticationHandlers">

    02 <list>

    03 <bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" p:httpClient-ref="httpClient" />

    04

    05 class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />-->

    06

    07 <bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">

    08 <property name="dataSource" ref="mysqlDataSource"/>

    09 <property name="sql"

    10 value="select password from t_user where username = ?" />

    11 <property name="passwordEncoder" ref="myPasswordEncoder">property>

    12 bean>

    13 list>

    14 property>

    1

    2 <bean id="myPasswordEncoder" class="org.jasig.cas.custom.encoder.MyPasswordEncoder" />


    这样就配置完成了,将项目导出war包,并部署到tomcat1所在机器上运行起来,效果会之前一样。

    收工。

    http://my.oschina.net/indestiny/blog/200768

    Copyright © 2019- baomayou.com 版权所有 赣ICP备2024042794号-6

    违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

    本站由北京市万商天勤律师事务所王兴未律师提供法律服务