CAS客户端服务器端配置步骤,之主配置

Posted by

来源自个儿的个人网址:

CAS配置(二)之主配置,cas配置

WEB-INF目录

壹.cas.properties文本(打开关闭SSL,主旨,定制页面设置)

#暗中认可端口配置

#server.name=
server.name=
#私下认可地址
#server.prefix=${server.name}/cas
server.prefix=${server.name}/zzcas
# IP address or CIDR subnet allowed to access the /status URI of CAS
that exposes health check information
cas.securityContext.status.allowedSubnet=127.0.0.1

#CSS+JS设置
#私下认可设置
#cas.themeResolver.defaultThemeName=cas-theme-default

#皮肤核心
cas.themeResolver.defaultThemeName=cas-theme-zzmetro

#首页默许设置
#cas.viewResolver.basename=default_views
#有关页面定制
cas.viewResolver.basename=zzmetro_views

 

2.spring-configuration/ticket格兰特ingTicket库克ieGenerator.xml(打按钮闭SSL)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
 <description>
 This Spring Configuration file describes the cookie used to store the WARN parameter so that a user is warned whenever the CAS service
 is used.  You would modify this if you wanted to change the cookie path or the name.
 </description>

  <!--默认配置:开启SSL
  -->
 <bean id="warnCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
  p:cookieSecure="true"
  p:cookieMaxAge="-1"
  p:cookieName="CASPRIVACY"
  p:cookiePath="/zzcas" />
  <!--x新配置:关闭SSL
  <bean id="warnCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
    p:cookieSecure="false"
    p:cookieMaxAge="-1"
    p:cookieName="CASPRIVACY"
    p:cookiePath="/cas" 
    p:p:cookieSecure="false" />
    -->
</beans>

  3.spring-configuration/warnCookieGenerator.xml(打开关闭SSL)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
 <description>
 This Spring Configuration file describes the cookie used to store the WARN parameter so that a user is warned whenever the CAS service
 is used.  You would modify this if you wanted to change the cookie path or the name.
 </description>

  <!--默认配置:开启SSL
  -->
 <bean id="warnCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
  p:cookieSecure="true"
  p:cookieMaxAge="-1"
  p:cookieName="CASPRIVACY"
  p:cookiePath="/zzcas" />
  <!--x新配置:关闭SSL
  <bean id="warnCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
    p:cookieSecure="false"
    p:cookieMaxAge="-1"
    p:cookieName="CASPRIVACY"
    p:cookiePath="/cas" 
    p:p:cookieSecure="false" />
    -->
</beans>

肆.字符编码设置

spring-configuration/applicationContext.xml

  <bean id="messageSource" class="org.jasig.cas.web.view.CasReloadableMessageBundle"
          p:basenames-ref="basenames" p:fallbackToSystemLocale="false" p:defaultEncoding="UTF-8"
          p:cacheSeconds="180" p:useCodeAsDefaultMessage="true" />

spring-configuration/filters.xml

  <bean id="characterEncodingFilter" class="org.springframework.web.filter.CharacterEncodingFilter"
            p:encoding="UTF-8"
            p:forceEncoding="true" />

 5.单点登入过期策略配置

    <!--st的过期策略-->
    <bean id="serviceTicketExpirationPolicy" class="org.jasig.cas.ticket.support.MultiTimeUseOrTimeoutExpirationPolicy"
          c:numberOfUses="1" c:timeToKill="${st.timeToKillInSeconds:7200}" c:timeUnit-ref="SECONDS"/>

    <!-- TicketGrantingTicketExpirationPolicy: Default as of 3.5 -->
    <!-- Provides both idle and hard timeouts, for instance 2 hour sliding window with an 8 hour max lifetime -->
    <!--tgt的过期策略-->
    <!--当用户在2个小时(7200秒)之内不动移动鼠标或者进行系统超过8个小时(28800秒),则tgt过期-->
    <bean id="grantingTicketExpirationPolicy" class="org.jasig.cas.ticket.support.TicketGrantingTicketExpirationPolicy"
          p:maxTimeToLiveInSeconds="${tgt.maxTimeToLiveInSeconds:28800}"
          p:timeToKillInSeconds="${tgt.timeToKillInSeconds:7200}"/>

6.cas-servlet.xml配置

<?xml version=”1.0″ encoding=”UTF-8″?>

<beans xmlns=””
xmlns:xsi=””
xmlns:p=””
xmlns:c=””
xmlns:tx=””
xmlns:util=””
xmlns:sec=””
xsi:schemaLocation=”

;

<bean id=”authenticationManager”
class=”org.jasig.cas.authentication.PolicyBasedAuthenticationManager”>
<constructor-arg>
<map>
<!–新配置.接入数据库–>
<entry key-ref=”dbAuthenticationHandler
value-ref=”primaryPrincipalResolver” />
</map>
</constructor-arg>
<property name=”authenticationPolicy”>
<bean class=”org.jasig.cas.authentication.AnyAuthenticationPolicy”
/>
</property>
</bean>

<bean id=”dataSource”
class=”org.springframework.jdbc.datasource.DriverManagerDataSource”>

<!–MySql数据库认证–>
<!–
<property
name=”driverClassName”><value>com.mysql.jdbc.Driver</value></property>
<property
name=”url”><value>jdbc:mysql://192.168.0.58:3306/cassso</value></property>
<property
name=”username”><value>metro_monitor</value></property>
<property
name=”password”><value>123456</value></property>
–>

<!–MsSql数据库认证–>
<property
name=”driverClassName”><value>com.microsoft.sqlserver.jdbc.SQLServerDriver</value></property>
<!– <property
name=”url”><value>jdbc:sqlserver://192.168.0.58:1433;DatabaseName=CasSso</value></property>–>
<property
name=”url”><value>jdbc:sqlserver://192.168.0.3:1433;DatabaseName=ZhengZhouSso</value></property>
<property
name=”username”><value>sa</value></property>
<property
name=”password”><value>szhweb2010</value></property>

</bean>

<!–Mysql密码加密–>
<bean id=”passwordEncoder”
class=”org.jasig.cas.authentication.handler.DefaultPasswordEncoder”
c:encodingAlgorithm=”MD5″
p:characterEncoding=”UTF-8″ />

<!–验证处理–>
<bean id=”dbAuthenticationHandler”
class=”org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler”>
<property name=”dataSource” ref=”dataSource”></property>
<property name=”sql” value=”select LoginPassword as password from
ssoaccount where LoginAccount=? “></property>
<property name=”passwordEncoder”
ref=”passwordEncoder”></property>
</bean>

<bean id=”primaryPrincipalResolver”
class=”org.jasig.cas.authentication.principal.PersonDirectoryPrincipalResolver”
>
<property name=”attributeRepository” ref=”attributeRepository”
/>
</bean>

<!– 此处为增添一些 start –>
<bean id=”attributeRepository”
class=”org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao”
>
<constructor-arg index=”0″ ref=”dataSource”/>
<constructor-arg index=”1″ value=”SELECT * FROM ssoaccount WHERE
{0}”/>
<property name=”queryAttributeMapping”>
<map>
<!– key对应登陆音讯, vlaue对应数据库字段 –>
<entry key=”username” value=”LoginAccount”/>
</map>
</property>
<property name=”resultAttributeMapping”>
<map>
<!– key对应数据库字段 value对应attribute中的key –>
<entry key=”Sex” value=”Sex”/>
<entry key=”Address” value=”Address”/>
</map>
</property>
</bean>
<!– 此处为扩大一些 end –>

<bean id=”serviceRegistryDao”
class=”org.jasig.cas.services.InMemoryServiceRegistryDaoImpl”
p:registeredServices-ref=”registeredServicesList” />

<util:list id=”registeredServicesList”>
<bean class=”org.jasig.cas.services.RegexRegisteredService”
p:id=”0″ p:name=”HTTP and IMAP” p:description=”Allows HTTP(S) and
IMAP(S) protocols”
p:serviceId=”^(https?|http?|imaps?)://.*”
p:evaluationOrder=”10000001″
p:enabled=”true” p:allowedToProxy=”true” />
</util:list>

<!–日志暗许配置到文件–>
<!–
<bean id=”auditTrailManager”
class=”com.github.inspektr.audit.support.Slf4jLoggingAuditTrailManager”
/>
–>
<bean id=”healthCheckMonitor”
class=”org.jasig.cas.monitor.HealthCheckMonitor”
p:monitors-ref=”monitorsList” />
</beans>

七.WEB-INF下增加产量文件inspektrThrottledSubmissionContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">

  <aop:aspectj-autoproxy/>

  <bean id="inspektrThrottle"
        class="org.jasig.cas.web.support.InspektrThrottledSubmissionByIpAddressAndUsernameHandlerInterceptorAdapter">

    <constructor-arg index="0" ref="auditTrailManager" />
    <constructor-arg index="1" ref="dataSource" />

  </bean>

  <bean id="auditTrailManagementAspect" class="com.github.inspektr.audit.AuditTrailManagementAspect">
    <!-- String applicationCode -->
    <constructor-arg index="0" value="CAS" />

    <!-- PrincipalResolver auditablePrincipalResolver -->
    <constructor-arg index="1" ref="auditablePrincipalResolver" />

    <!-- List<AuditTrailManager> auditTrailManagers -->
    <constructor-arg index="2">
      <list>
        <ref bean="auditTrailManager" />
      </list>
    </constructor-arg>

    <!-- Map<String,AuditActionResolver> auditActionResolverMap -->
    <constructor-arg index="3">
      <map>
        <entry key="AUTHENTICATION_RESOLVER">
          <ref local="authenticationActionResolver" />
        </entry>
        <entry key="CREATE_TICKET_GRANTING_TICKET_RESOLVER">
          <ref local="ticketCreationActionResolver" />
        </entry>
        <entry key="DESTROY_TICKET_GRANTING_TICKET_RESOLVER">
          <bean class="com.github.inspektr.audit.spi.support.DefaultAuditActionResolver" />
        </entry>
        <entry key="GRANT_SERVICE_TICKET_RESOLVER">
          <ref local="ticketCreationActionResolver" />
        </entry>
        <entry key="GRANT_PROXY_GRANTING_TICKET_RESOLVER">
          <ref local="ticketCreationActionResolver" />
        </entry>
        <entry key="VALIDATE_SERVICE_TICKET_RESOLVER">
          <ref local="ticketValidationActionResolver" />
        </entry>
        <entry key="DELETE_SERVICE_ACTION_RESOLVER">
          <ref local="deleteServiceActionResolver" />
        </entry>
        <entry key="SAVE_SERVICE_ACTION_RESOLVER">
          <ref local="saveServiceActionResolver" />
        </entry>
      </map>
    </constructor-arg>

    <!-- Map<String,AuditResourceResolver> auditResourceResolverMap -->
    <constructor-arg index="4">
      <map>
        <entry key="AUTHENTICATION_RESOURCE_RESOLVER">
          <bean class="org.jasig.cas.audit.spi.CredentialsAsFirstParameterResourceResolver" />
        </entry>
        <entry key="CREATE_TICKET_GRANTING_TICKET_RESOURCE_RESOLVER">
          <ref local="returnValueResourceResolver" />
        </entry>
        <entry key="DESTROY_TICKET_GRANTING_TICKET_RESOURCE_RESOLVER">
          <ref local="ticketResourceResolver" />
        </entry>
        <entry key="GRANT_SERVICE_TICKET_RESOURCE_RESOLVER">
          <bean class="org.jasig.cas.audit.spi.ServiceResourceResolver" />
        </entry>
        <entry key="GRANT_PROXY_GRANTING_TICKET_RESOURCE_RESOLVER">
          <ref local="returnValueResourceResolver" />
        </entry>
        <entry key="VALIDATE_SERVICE_TICKET_RESOURCE_RESOLVER">
          <ref local="ticketResourceResolver" />
        </entry>
        <entry key="DELETE_SERVICE_RESOURCE_RESOLVER">
          <ref local="deleteServiceResourceResolver" />
        </entry>
        <entry key="SAVE_SERVICE_RESOURCE_RESOLVER">
          <ref local="saveServiceResourceResolver" />
        </entry>
      </map>
    </constructor-arg>
  </bean>

  <bean id="saveServiceResourceResolver" class="com.github.inspektr.audit.spi.support.ParametersAsStringResourceResolver" />

  <bean id="deleteServiceResourceResolver" class="org.jasig.cas.audit.spi.ServiceManagementResourceResolver" />

  <bean id="saveServiceActionResolver" class="com.github.inspektr.audit.spi.support.DefaultAuditActionResolver">
    <constructor-arg index="0" value="_SUCCEEDED" />
    <constructor-arg index="1" value="_FAILED" />
  </bean>

  <bean id="deleteServiceActionResolver" class="com.github.inspektr.audit.spi.support.ObjectCreationAuditActionResolver">
    <constructor-arg index="0" value="_SUCCEEDED" />
    <constructor-arg index="1" value="_FAILED" />
  </bean>

  <bean id="auditablePrincipalResolver" class="org.jasig.cas.audit.spi.TicketOrCredentialPrincipalResolver">
    <constructor-arg index="0" ref="ticketRegistry" />
  </bean>

  <bean id="authenticationActionResolver"
        class="com.github.inspektr.audit.spi.support.DefaultAuditActionResolver">
    <!-- String successSuffix -->
    <constructor-arg index="0" value="_SUCCESS" />

    <!-- String failureSuffix -->
    <constructor-arg index="1" value="_FAILED" />
  </bean>

  <bean id="ticketCreationActionResolver"
        class="com.github.inspektr.audit.spi.support.DefaultAuditActionResolver">
    <!-- String successSuffix -->
    <constructor-arg index="0" value="_CREATED" />

    <!-- String failureSuffix -->
    <constructor-arg index="1" value="_NOT_CREATED" />
  </bean>

  <bean id="ticketValidationActionResolver"
        class="com.github.inspektr.audit.spi.support.DefaultAuditActionResolver">
    <!-- String successSuffix -->
    <constructor-arg index="0" value="D" />

    <!-- String failureSuffix -->
    <constructor-arg index="1" value="_FAILED" />
  </bean>

  <bean id="returnValueResourceResolver"
        class="com.github.inspektr.audit.spi.support.ReturnValueAsStringResourceResolver" />

  <bean id="ticketResourceResolver"
        class="org.jasig.cas.audit.spi.TicketAsFirstParameterResourceResolver" />

  <!--日志配置到数据库-->
  <bean id="auditTrailManager" class="com.github.inspektr.audit.support.JdbcAuditTrailManager">
    <constructor-arg index="0" ref="inspektrTransactionTemplate" />
    <property name="dataSource" ref="dataSource" />
  </bean>

  <bean id="inspektrTransactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
        p:dataSource-ref="dataSource"
      />

  <bean id="inspektrTransactionTemplate"
        class="org.springframework.transaction.support.TransactionTemplate"
        p:transactionManager-ref="inspektrTransactionManager"
        p:isolationLevelName="ISOLATION_READ_COMMITTED"
        p:propagationBehaviorName="PROPAGATION_REQUIRED"
      />
</beans>

八.View页面,Css,Js等公事参照他事他说加以考察原暗许文件拷贝举办修改,拷贝出来的文书夹或许文件名,参照前边cas.properties配置

9.添加Jar包

cas-server-support-jdbc-4.0.0.jar

hibernate-entitymanager-4.1.4.Final.jar

mysql-connector-java-5.1.40-bin.jar

sqljdbc4.jar

上述JAHaval包加多至WEB-INF/lib/目录下边

十.有的数量表脚本

/****** Object:  Table [dbo].[com_audit_trail]    Script Date: 04/10/2017 13:19:17 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[com_audit_trail](
 [Id] [int] IDENTITY(1,1) NOT NULL,
 [AUD_USER] [nvarchar](100) NULL,
 [AUD_CLIENT_IP] [nvarchar](15) NULL,
 [AUD_SERVER_IP] [nvarchar](15) NULL,
 [AUD_RESOURCE] [nvarchar](100) NULL,
 [AUD_ACTION] [nvarchar](100) NULL,
 [APPLIC_CD] [nvarchar](15) NULL,
 [AUD_DATE] [datetime] NULL
) ON [PRIMARY]

GO

瞩目:用户表重返的密码字段,经SQL查询后,重回的必须是password,比方:select
LoginPassword as password from ssoaccount where LoginAccount=?
,本SQL脚本会随着数据库分化而不相同

11.登入成功,票据验证再次回到别的音讯

布置文件修改

 <!-- 此处为增加部分 start -->  
    <bean id="attributeRepository" class="org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao" >  
        <constructor-arg index="0" ref="dataSource"/>  
        <constructor-arg index="1" value="SELECT * FROM ssoaccount WHERE {0}"/>  
        <property name="queryAttributeMapping">  
            <map>  
                <!-- key对应登录信息, vlaue对应数据库字段 -->  
                <entry key="username" value="LoginAccount"/>  
            </map>  
        </property>  
        <property name="resultAttributeMapping">  
            <map>  
                <!-- key对应数据库字段  value对应attribute中的key -->  
                <entry key="Sex" value="Sex"/>  
                <entry key="Address" value="Address"/>  
            </map>  
        </property>  
    </bean>  
    <!-- 此处为增加部分 end --> 

革新casServiceValidationSuccess.jsp文件改进:

<%@ page session="false" contentType="application/xml; charset=UTF-8" %>
<%@ page import="java.util.Map.Entry" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>
    <cas:authenticationSuccess>
        <cas:user>${fn:escapeXml(assertion.primaryAuthentication.principal.id)}</cas:user>
        <c:if test="${not empty pgtIou}">
            <cas:proxyGrantingTicket>${pgtIou}</cas:proxyGrantingTicket>
        </c:if>
        <c:if test="${fn:length(assertion.chainedAuthentications) > 1}">
            <cas:proxies>
                <c:forEach var="proxy" items="${assertion.chainedAuthentications}" varStatus="loopStatus" begin="0"
                           end="${fn:length(assertion.chainedAuthentications)-2}" step="1">
                    <cas:proxy>${fn:escapeXml(proxy.principal.id)}</cas:proxy>
                </c:forEach>
            </cas:proxies>
        </c:if>

        <c:if test="${fn:length(assertion.primaryAuthentication.principal.attributes) > 0}">
            <cas:attributes>
                <c:forEach var="attr"
                           items="${assertion.primaryAuthentication.principal.attributes}"
                           varStatus="loopStatus" begin="0"
                           end="${fn:length(assertion.primaryAuthentication.principal.attributes)}"
                           step="1">
                    <%-- ${attr.value['class'].simpleName} fails for List: use scriptlet instead --%>
                    <%
                        Entry entry = (Entry) pageContext.getAttribute("attr");
                        Object value = entry.getValue();
                        pageContext.setAttribute("isAString", value instanceof String);
                    %>
                    <c:choose>
                        <%-- it's a String, output it once --%>
                        <c:when test="${isAString}">
                            <cas:${fn:escapeXml(attr.key)}>${fn:escapeXml(attr.value)}</cas:${fn:escapeXml(attr.key)}>
                        </c:when>
                        <%-- if attribute is multi-valued, list each value under the same attribute name --%>
                        <c:otherwise>
                            <c:forEach var="attrval" items="${attr.value}">
                                <cas:${fn:escapeXml(attr.key)}>${fn:escapeXml(attrval)}</cas:${fn:escapeXml(attr.key)}>
                            </c:forEach>
                        </c:otherwise>
                    </c:choose>
                </c:forEach>
            </cas:attributes>
        </c:if>

    </cas:authenticationSuccess>
</cas:serviceResponse>

 

到现在:Cas的第三的布署基本做到

 

WEB-INF目录
一.cas.properties文书(打开关闭SSL,大旨,定制页面设置) #暗中认可端口配置
#server.name=…

前不久项目中要求做单点登入,客户端包蕴Java、ruby和PHP,java有多少个应用程序,php是discuz+supesite+ucenter,配置步骤如下:

cas介绍:

CAS 是 耶尔 大学倡导的二个开源项目,意在为 Web
应用体系提供一种保证的单点登入方法,CAS 在 200四 年 1二 月正式成为 JA-SIG
的3个项目。CAS 具备以下特征:

  • 开源的信用社级单点登入解决方案。
  • CAS Server 为急需单独安插的 Web 应用。
  • 支撑非常多的客户端(这里指单点登陆体系中的各类 Web 应用),蕴含 Java,
    .Net, PHP, Perl, Apache, uPortal, Ruby 等。

一、cas服务端:下载地址:http://downloads.jasig.org/cas/cas的服务端和客户端有非常多版本,最新版本和老版本有比较大的差异,解压cas-server-3.4.4-release.zip将modules目录下的cas-server-webapp-三.四.四.war改名称叫cas.war复制到tomcat的webapps下,运行tomcat,访问: 就能够看出登入分界面;

CAS 原理和商讨

从布局上看,CAS 包蕴四个部分: CAS Server 和 CAS Client。CAS Server
必要单独安插,重要担当对用户的印证专门的职业;CAS Client
担当管理对客户端受爱戴财富的造访请求,供给登录时,重定向到 CAS
Server。图一 是 CAS 最大旨的批评进度:
图 一. CAS 基础协议

CAS Client 与受保险的客户端应用铺排在壹块儿,以 Filter
方式维护受保险的财富。对于访问受保证能源的种种 Web 请求,CAS Client
会深入分析该请求的 Http 请求中是还是不是带有 ServiceTicket,如果未有,则申明当前用户并未有登6,于是将请求重定向到钦定好的 CAS
Server 登陆地址,并传递 Service(也正是要拜访的目标资源地址),以便登陆成功之后退回该地址。用户在第 3步中输入认证音信,假设登陆成功,CAS Server
随机发生三个非常短度、唯一、不可伪造的 ServiceTicket,并缓存以待未来验证,之后系统自动重定向到 Service所在地方,并为客户端浏览器设置四个 Ticket 格兰特ed Cookie(TGC),CAS
Client 在获得 Service 和新产生的 Ticket 过后,在第 五,陆 步中与 CAS
Server 举办身份合适,以管教 Service Ticket 的合法性。

在该协议中,全体与 CAS 的彼此均使用 SSL 协议,确定保证,ST 和 TGC
的安全性。协议专门的学问经过中会有 二 次重定向的进度,可是 CAS Client 与 CAS
Server 之间张开 Ticket 验证的经过对于用户是透明的。

别的,CAS 协议中还提供了 Proxy
(代理)形式,以适应越来越高级、复杂的选择场景,具体介绍可以参照他事他说加以调查 CAS
官网上的连带文书档案。

cas服务端私下认可使用的是
用户名=密码的求证,并且应用的是https验证,需求给tomact配置证书,本系统并未有利用https验证,若选择https验证可参看:

CAS服务器端配置

 。

布局服务器情状

第1下载必须的软件:

Tomcat6.0:
Windows Service Installer

Jdk:
您能够选取带有 jre 的安装文件恐怕您机器里未来有 jre 情况则只需求下载
JDK.
Java SE 6 Update 10 Beta  (不带JRE)
JDK 6 Update 6 (带JRE)
Java Runtime Environment (JRE) 6 Update 6 (JRE)

上边按步骤来:
1.安装JDK和JRE
直接下一步到安装完结,记住JDK安装的门径。

二.安装JDK相关的遭逢变量
一).切换来桌面,右键点击“小编的微管理器” -> 属性 -> 高档 -> 如图
创设七个 JAVA_HOME 意况变量,变量值为JDK的根目录。

二).和地方同样的操作,创设 意况变量 CLASSPATH,值为
“.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\jre\lib\rt.jar”

三).依旧操作情状变量但不是新建,而是编辑。编辑 Path
变量,最变量值最后边丰富 ;%JAVA_HOME%\bin;

3.安装Tomcat
一).一贯下一步,中间供给选用安装路线和 JVM
目录,要是JDK和JRE安装没难点,这里他应有能半自动找得到,否则必要您手动钦命一下。
中间怎么也不用管,有壹部让您设置端口,不用动,保持默许的就行了。

2).新扩大一个 CATALINA_HOME 情状变量,变量值为您TOMCAT安装时的根目录。

三.测试运转服务器

设置后的bin目录共有一下多少个文本:
bootstrap.jar
tomcat-juli.jar
tomcat6.exe
tomcat6w.exe
内部tomcat陆w.exe是监督tomcat运营的,能够一向运维,或许裁减到显示屏右下角成为三个小Logo。
间接运营tomcat陆w.exe大概“tomcat陆w //ES//” 都能够进去监察和控制配置窗口;
或然运维“tomcat6w //MS//”把它裁减到右下角。

也可用startup.bat和shutdown.bat 来运维和倒闭服务。
web访问测试
运行后,能够经过浏览器举行走访,测试运行是不是健康。
用IE大概Firefox等浏览器,输入地方:
      
–要是设置时修改了端口,请把8080用修改后的值替换。
譬如能够健康浏览到tomcat接待信息,正是科学了,不然就要检讨装置是或不是科学、防火墙的设置等。
日常遇上的一个主题素材是端口争辩,最布满的就是80端口被侵夺,导致服务不能够平常运营。倘使经过tomcat6
//TS//tomcat陆来运营,马上就可以察觉提醒音讯。修改一下tomcat陆\conf\server.xml中的端口就可见消除。

常见采取80端口的有:
一.
IIS服务器,因为在windows服务器上,多数都设置了IIS,而IIS暗许的端口就是80.
2.
skype即时聊天工具,skype的可以穿透防火墙的本事,也是经过占领80端口已毕的。

翻开头口占用的吩咐:
进入windows命令行,输入:
netstat -an
以此命令归来有四列:protocol协议、local address本机地址、foreign
address来访者地址、status状态
浏览本机地址一列,能够看到眼下主机对外地劳工务的IP地址、端口都有何样。
假设一台机器有1玖2.168.一.100和1玖2.16八.一.10一八个地点,那么:
0.0.0.0:80意味那台机械上富有80端口都被使用
1二柒.0.0.一:80象征1二七.0.0.壹的80被使用,但.十0和.10一IP地址的80还未利用。
1玖二.168.1.十0:80表示.十0IP地址的80端口被应用
1九2.16八.一.拾一:80表示.拾一IP地址的80端口被使用

 

 

 

 一.壹、若不行使https验证,服务器端须求安插

部署 CAS Server

CAS Server 是1套基于 Java 落成的服务,该服务以1个 Java Web Application
单独布置在与 servlet二.三 包容的 Web 服务器上,其余,由于 Client 与 CAS
Server 之间的交互使用 Https 协议,因而布署 CAS Server 的服务器还亟需援救SSL 探究。当 SSL 配置成功过后,像一般 Web 应用一样将 CAS Server
陈设在服务器上就可以健康运维了,可是,在真正使用此前,还亟需增添验证用户的接口。

 

1、cas\WEB-INF\deployerConfigContext.xml

Tomcat配置HTTPS方式

 

1、开始-〉运行-〉cmd 进入到jdk下的bin目录

2、输入如下指令

keytool -v -genkey -alias tomcat -keyalg RSA -keystore
d:/tomcat.keystore  -validity 36500

附:

d:/tomcat.keystore是将调换的tomcat.keystore放到d盘根目录下。

“-validity 36500”含义是注明有效期,36500代表拾0年,暗许值是90天

专注若要放到c盘,在win七系统下,须要以管理员身份进入到命令行中实行操作,不然是心有余而力不足创制tomcat.keystore的。本例放到d盘下。
怎么以管理员身份进入到命令行下呢?开首->寻找框中输入cmd->等待(注意不回车)->现身cmd.exe->右键“以管理人身份运转”就可以。

3、输入keystore密码

密码轻松,此处以123456为例,要铭记这些密码,之后在实行server.xml配置时索要运用。

4、输入名字、组织单位、组织、市、省、国家等消息

注意事项:

A、Enter keystore password:此处需求输入大于四个字符的字符串

B、“What is your first and last
name?”这是必填项,并且必须是TOMCAT安插主机的域名照旧IP[如:gbcom.com 或者 10.1.25.251],正是您未来要在浏览器中输入的造访地址

C、“What is the name of your organizational unit?”、“What is the name of
your organization?”、“What is the name of your City or Locality?”、“What
is the name of your State or Province?”、“What is the two-letter country
code for this
unit?”可以依照必要填写也得以不填写直接回车,在系统摸底“correct?”时,对照输入消息,假如符合供给则应用键盘输入字母“y”,不然输入“n”重新填写上面包车型地铁音信

D、Enter key password for
<tomcat>,那项较为主要,会在tomcat配置文件中动用,提议输入与keystore的密码一致,设置任何密码也足以

l  达成上述输入后,直接回车则在你在其次步中定义的岗位找到变化的文本

5、输入之后会产出确认的提醒

此刻输入y,并回车。此时创建完毕keystore。
跻身到D盘根目录下得以观看已经成形的tomcat.xml

6、进入tomcat文件夹
找到conf目录下的sever.xml并拓展编写制定

7、编辑
  <Connector port=”8443″ protocol=”HTTP/1.1″ SSLEnabled=”true”
maxThreads=”150″ scheme=”https” secure=”true”
clientAuth=”false”
keystoreFile=”D:/AppServer/Tomcat/apache-tomcat-6.0.32/conf/tomcat.keystore”
keystorePass=”deleiguo” sslProtocol=”TLS” />
注:
肆方中的keystore的密码,就是刚刚大家设置的“123456”.

编写实现后关闭并保留sever.xml

8、汤姆cat运转成功后,使用 访问页面

页面成功开发即tomcat下的https配置成功。

 

9、注意事项:

(1)    生成证书的小时,要是IE客户端所在机器的时刻早于证雅士效时间,或许晚于有效时间,IE会提醒“该安全表明已到期或还未见效”

(二)    假如IE提醒“安全证书上的名称无效可能与站点名称不匹配”,则是由生成证书时填写的服务器所在主机的域名“您的名字与姓氏是何等?”/“What
is your first and last name?”不得法引起的

 

10、遗留难点:

(1)如若AC主机不能经过域名查找,必须采纳IP,不过这一个IP只有在布置后技巧鲜明,那样证书就必须在AC鲜明IP地址后才具生成

(2)证书文件只好绑定二个IP地址,如果有十.1.2五.250 和 192.16捌.一.250 四个IP地址,在注明生成文书时,如利用了10.一.二五.250,通过IE就只能选择拾.一.25.250 来走访AC-WEB,192.16八.壹.250是不能够访问AC-WEB的。

 

 

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

配置CAS
  1. 下载cas 
  2. 设置cas-server,我们假若安装cas-server的服务器为server1

(1)     将cas-server-三.四.2-release.zip
解压,将moudels目录下cas-server-webapp-x.x.war拷贝到tomcat的webapps目录下,修        改名称叫cas.war.

(二)     生成server一的黑河注脚:

keytool -export -alias tomcat -file D:/file.cer -keystore
d:/tomcat.keystore -validity 36500

下一场输入d:/tomcat.keystore中的keystore密码

-file D:/file.cer 即为生成的cer文件,可径直点击安装

(3)     重新开动server一上的tomcat,核查cas配置是不是中标,访问https://ip或域名:8443/cas/login,借使能观望cas的记名页面则意味着配置成功。

 
扩大参数p:requireSecure=”false”,是或不是供给安全认证,即HTTPS,false为不利用,加上去之后如下:

cas客户端配置

1、筹划CAS的PHP库和相关库文件

1)下载 cas php客户端

二) 由于其用到了PEA汉兰达的DB库,须要下载

当然不确定是自家说的版本,但本人给的是本身试验成功的版本。

三)
用于采纳到了SSL所以须求下载openssl。当然小编是在windows景况下侦查的,下载的windows版本。

4)安装openssl。

2、配置PHP环境

一)将CAS-一.3.一.tgz、PEALacrosse-一.七.一.tgz、DB-一.柒.1叁.tgz放在同2个索引如图。

肆)由于phpcas用到了CU途胜L(用于连接ssl),因而要求确定保障php解释意况亟待有那个增添。须求做的正是修改ini文件将extentions节下的遮光符号去掉,然后正是反省PHP情况的extentions目录下是或不是有对应的.dll。一般规范设置都会有。

3、测试CAS的php客户端

一)在CAS-一.三.一.tgz中的docs/examples文件夹拷贝到网址的根目录下。

2)config.example.php 修改为config.php

三)张开config.php 举行改造

4)访问 localhost:8080/examples/example_simple.php  (客户端的地址)

会跳转到CAS服务器登6页面。默许只要用户名和密码一样就足以由此认证。

 

登录成功后会中间转播到客户端。提醒验证成功。

 

别的客户端的配备按上述步骤配置。就能够兑现单点。

 

 

 

 

 

 

 

 

 

 <bean
class=”org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler”
 p:httpClient-ref=”httpClient”  p:requireSecure=”false”/>

进阶

 2、cas\WEB-INF\spring-configuration\

CAS服务端使用数据库验证用户

ticketGrantingTicketCookieGenerator.xml

创建表

create table t_user(
username varchar(200) primary key,
password varchar(200)
);
insertinto users(username,password) values(‘test’,’123′);

<bean id=”ticketGrantingTicketCookieGenerator”
class=”org.jasig.cas.web.support.CookieRetrievingCookieGenerator”

添加jar

将数据库驱动包:mysql-connector-java-五.1.5-bin.jar
cas-server-support-jdbc-三.x.x.jar(来自于\cas-server-3.4.2\modules)
copy到cas/WEB-INF/lib/下

      p:cookieSecure=”true”

创造验证service层

创建LoginDAO

public class LoginDAO extends JdbcDaoSupport {

public List queryList(String sql,Object[] objs){
return this.getJdbcTemplate().queryForList(sql, objs);
}
}

创建LoginService

public class LoginService {

private LoginDAO loginDAO;

/**
* 判别用户登陆音讯
* @param username
* @param password
* @return null为用户不设有,false密码错误,true登陆成功
*/
public Boolean isUserCorrect(String username,String password){
String sql = “select password from t_user where username=?”;

List results = loginDAO.queryList(sql, new Object[]{username});
if(results==null||results.size()==0){
return null;
}else
if(password.equals(((Map)results.get(0)).get(“password”).toString())){
return new Boolean(true);
}else{
return new Boolean(false);
}
}

public LoginDAO getLoginDAO() {
return loginDAO;
}

public void setLoginDAO(LoginDAO loginDAO) {
this.loginDAO = loginDAO;
}
}

重写验证类

//重写AbstractUsernamePasswordAuthenticationHandler中表明方法authenticateUsernamePasswordInternal
public class UserAuthenticationHandler extends
AbstractUsernamePasswordAuthenticationHandler {

private LoginService loginService;

@Override
protected boolean authenticateUsernamePasswordInternal(
UsernamePasswordCredentials credentials) throws AuthenticationException
{
String username = credentials.getUsername();
String password = credentials.getPassword();
Boolean result = loginService.isUserCorrect(username, password);
if(result==null){
//用户不存在,”error.authentication.credentials.bad.usernameorpassword.username”必须在message配置文件中定义,验证退步时会在报到页面突显音信
throw new
BadPasswordAuthenticationException(“error.authentication.credentials.bad.usernameorpassword.username”);
}else if(!result.booleanValue()){
//密码错误
throw new
BadPasswordAuthenticationException(“error.authentication.credentials.bad.usernameorpassword.password”);
}else{
//登十分之六功
return true;
}

}

public LoginService getLoginService() {
return loginService;
}

public void setLoginService(LoginService loginService) {
this.loginService = loginService;
}

}

概念错误音讯

在messages_zh_CN.properties中增多验证出错消息

error.authentication.credentials.bad.usernameorpassword.username=用户不存在

error.authentication.credentials.bad.usernameorpassword.password=密码错误

配置WEB-INF\deployerConfigContext.xml文件

<!– 在添加DataSource –>
<bean id=”dataSource”
class=”org.springframework.jdbc.datasource.DriverManagerDataSource”
>
<property name=”driverClassName”>
<value>com.mysql.jdbc.Driver</value>
</property>
<property name=”url”>
<value>jdbc:mysql://localhost:3306/test</value>
</property>
<property name=”username”>
<value>root</value>
</property>
<property name=”password”>
<value>root</value>
</property>
</bean>

<!– 注入Service和DAO –>
<bean name=”jdbcTemplate”
class=”org.springframework.jdbc.core.JdbcTemplate”>
<property name=”dataSource” ref=”dataSource”></property>
</bean>

<bean name=”loginDAO” class=”com.cas.dao.LoginDAO”>
<property name=”jdbcTemplate”
ref=”jdbcTemplate”></property>
</bean>

<bean name=”loginService” class=”com.cas.service.LoginService”>
<property name=”loginDAO” ref=”loginDAO”></property>
</bean>

<!–
找到SimpleTestUsernamePasswordAuthenticationHandler的bean,将它注释掉,加多底下的bean
–>
<bean class=”com.cas.authentication.UserAuthenticationHandler” >
<property name=”loginService”
ref=”loginService”></property>
</bean>运维tomcat,测试登陆.(倘诺是运用war在tomcat解压的服务端,必须将上边类的编写翻译完的class文件,包,消息配置文件复制到WEB-INF\classes下)

本文来源 黄粱美梦的小站,转发时请表明出处及相应链接。

本文长久链接:

      p:cookieMaxAge=”-1″

      p:cookieName=”CASTGC”

      p:cookiePath=”/cas” />

 参数p:cookieSecure=”true”,同理为HTTPS验证相关,TRUE为利用HTTPS验证,FALSE为不利用https验证。

参数p:cookie马克斯Age=”-1″,轻易说是首席营业官KIE的最大生命周期,-一为无生命周期,即只在当前开荒的IE窗口有效,IE关闭或另行展开其余窗口,仍会需要表明。能够依赖须求修改为大于0的数字,比方3600等,意思是在3600秒内,展开任性IE窗口,都无需验证

壹.二、服务器端退出国访问问:,
若希望退出后能再次来到则需求配置

服务端cas-servlet.xml配置

<bean id=”logoutController”
class=”org.jasig.cas.web.LogoutController” … …/>

充实品质 p:followServiceRedirects=”true”

退出链接为:http://localhost:8080/cas/logout?service=http://localhost:8080/Casclient/index.jsp

一.三、改变服务器端验证办法,采纳数据库验证:

修改配置文件deployerConfigContext.xml,加dbcp连接池:(以Oracle为例) 

<bean id=”casDataSource”
class=”org.apache.commons.dbcp.BasicDataSource”>
     <property name=”driverClassName”>
          <value>oracle.jdbc.driver.OracleDriver</value>
     </property>
     <property name=”url”>
         
<value>jdbc:oracle:thin:@192.168.18.26:1521:orcl</value>
     </property>
     <property name=”username”>
          <value>test</value>
     </property>
     <property name=”password”>
          <value>test</value>
     </property>
   </bean>

需要的jar包有:(见附件:cas-server-support-jdbc-3.4.4.jar,commons-dbcp-1.2.1.jar,commons-pool-1.3.jar,ojdbc14_g.jar)

安排加密方法,cas内置的有MD5加密,也得以写自身的加密类,实现org.jasig.cas.authentication.handler.PasswordEncoder接口就能够:

   <bean id=”passwordEncoder”  
    class=”org.jasig.cas.authentication.handler.DefaultPasswordEncoder”
autowire=”byName”>     
    <constructor-arg value=”MD5″/>  
   </bean> 

评释掉默许的求证形式,选择数据库查询求证:

<property name=”authenticationHandlers”>
     <list>
     <!—-注释掉这里的暗中认可验证措施,选拔以下验证QueryDatabaseAuthenticationHandler–>
    <!–
    <bean
     class=”org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler”
/> –>

 

     <bean
class=”org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler”>
      <property name=”dataSource” ref=”casDataSource” />
      <property name=”sql” 
         value=”select password from userinfo where lower(username) =
lower(?)” />
      <property  name=”passwordEncoder”  ref=”passwordEncoder”/>
     </bean>
   </list>
  </property>

—————到这里cas服务端的布局就到位了。

 

二、java客户端配置,下载客户端:http://downloads.jasig.org/cas-clients/,近期新型版本为:cas-client-三.2.0

将modules下的jar复制到java客户端Casclient壹的lib下,在web.xml中布局过滤器,配置如下(详细情况见附属类小部件):

<?xml version=”1.0″ encoding=”UTF-8″?>
<web-app version=”2.4″ 
 xmlns=””
 xmlns:xsi=””
 xsi:schemaLocation=”
 “>
 
 <!–
用于单点退出,该过滤器用于落到实处单点登出功能,公告别的使用单点登出–>

 <listener>
        
<listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
 </listener>

 <!– 该过滤器用于落到实处单点登出效益,可选配置。 –>

 <filter>
         <filter-name>CAS Single Sign Out
Filter</filter-name>
        
<filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
 </filter>
 <filter-mapping>
         <filter-name>CAS Single Sign Out
Filter</filter-name>
         <url-pattern>/*</url-pattern>
 </filter-mapping>

 
 <!– 该过滤器担负用户的表达职业,必须启用它 –>
 <filter>
         <filter-name>CASFilter</filter-name>
        
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
         <init-param>
                
<param-name>casServerLoginUrl</param-name>
                
<param-value>;
                 <!–这里的server是服务端的IP–>
         </init-param>
         <init-param>
                 <param-name>serverName</param-name>
                
<param-value>;
         </init-param>
 </filter>
 <filter-mapping>
         <filter-name>CASFilter</filter-name>
         <url-pattern>/*</url-pattern>
 </filter-mapping>
 
 <!– 该过滤器肩负对Ticket的校验专门的职业,必须启用它 –>
 <filter>
         <filter-name>CAS Validation Filter</filter-name>
         <filter-class>
                
org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
         <init-param>
                
<param-name>casServerUrlPrefix</param-name>
                
<param-value>;
         </init-param>
         <init-param>
                 <param-name>serverName</param-name>
                
<param-value>;
         </init-param>
 </filter>
 <filter-mapping>
         <filter-name>CAS Validation Filter</filter-name>
         <url-pattern>/*</url-pattern>
 </filter-mapping>
 
 <!–
         该过滤器担负贯彻HttpServletRequest请求的卷入,
        
比方允许开荒者通过HttpServletRequest的getRemoteUser()方法赢得SSO登入用户的登6名,可选配置。
 –>
 <filter>
         <filter-name>CAS HttpServletRequest Wrapper
Filter</filter-name>
         <filter-class>
                
org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
 </filter>
 <filter-mapping>
         <filter-name>CAS HttpServletRequest Wrapper
Filter</filter-name>
         <url-pattern>/*</url-pattern>
 </filter-mapping>

<filter>
        <filter-name>CAS Assertion Thread Local
Filter</filter-name>
       
<filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
</filter>
<filter-mapping>
        <filter-name>CAS Assertion Thread Local
Filter</filter-name>
        <url-pattern>/*</url-pattern>
</filter-mapping>
 
 
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

 

页面为:

<%
AttributePrincipal principal =
(AttributePrincipal)request.getUserPrincipal();   
String username = principal.getName(); 
%>
<br/>———————————————————-<br/>
<h一>登录成功,那是客户端一啊</h一><br/>
用户名:<%=username %><br/>
<a
href=””>进入客户端2</a><br/>

<a
href=”http://localhost:8080/cas/logout?service=;

———–到此地java客户端配置成功,公布到tomcat,复制Casclient一改名称叫Casclient2,运行tomcat,

 

做客Casclient壹,跳转到登6页面,登陆成功后成功转化登入成功页面,那时访问Casclient二发掘没有要求报到即体现登十分之六功页面,java单点登入成功。

 

3、配置php客户端,下载php客户端: ,

新建php工程:Phpcasclient一,将CAS文件夹和CAS.php复制到工程中,将docs/examples/example_simple.php

拷贝到apache目录下,修改如下:

<?php

//
// phpCAS simple client
//

// import phpCAS lib
include_once(‘CAS.php’);

phpCAS::setDebug();

// initialize phpCAS
phpCAS::client(CAS_VERSION_2_0,’1玖二.168.1八.八’,8080,’cas’);   //注意端口号未有引号
phpCAS::setNoCasServerValidation();

// force CAS authentication
phpCAS::forceAuthentication();

// at this step, the user has been authenticated by the CAS server
// and the user’s login name can be read with phpCAS::getUser().

// logout if desired
if (isset($_REQUEST[‘logout’])) {

 $param=array(“service”=>”http://localhost/Phpcasclient1/example\_simple.php”);//脱离登陆后归来

 phpCAS::logout($param);
}

// for this test, simply print that the authentication was successfull
?>

 

注意的地点:假若服务器配置为http格局,则必要将CAS/Client.php文件中的https替换为http(差不离有多个地点,记不清了),不然会报错:

**CAS Authentication failed!

You were not authenticated.

You may submit your request again by clicking here.

If the problem persists, you may contact the administrator of this site.**

……………………….

<html>
  <head>
    <title>phpCAS simple client</title>
  </head>
  <body>
    <h1>Successfull Authentication!那是客户端一</h1>
    <p>the user’s login is <b><?php echo
phpCAS::getUser(); ?></b>.</p>
    <p>phpCAS version is <b><?php echo
phpCAS::getVersion(); ?></b>.</p>
     <p><a
href=””>去java客户端1</a></p>
     <p><a href=”?logout=”>退出</a></p>
  </body>
</html>

php配置需求开启php_curl,能够复制Phpcasclient1为Phpcasclient2

访问:http://localhost/Phpcasclient1/example\_simple.php,跳转到登录页面,登五分三功后走访Phpcasclient二,无需报到,

php单点登入成功,那时再拜访java客户端开掘也无需报到,php和java应用之间单点登伍分三功。

注:php的phpCAS::client(CAS_VERSION_2_0,’1玖贰.168.1八.8′,8080,’cas’);地址要求和java的web.xml中的cas服务器地址一样,笔者起头贰个写的ip:1九贰.16八.1八.八,3个写的localhost,

php和java总是无法同步登6,郁闷了旷日长久

—————-到此处java和php的客户端已经安插完毕,以后你会意识php和java之间不能够单点登出,php端退出java客户端也退出,反之java退出不过php却并未有一齐退出

 

那边供给做二个布置,在

phpCAS::setNoCasServerValidation();

// force CAS authentication
phpCAS::forceAuthentication();

这里充裕

phpCAS::setNoCasServerValidation();

// force CAS authentication

phpCAS::handleLogoutRequests(); 
这里会检验服务器端java退出的照料,就能够达成php和java间协同登出了。

phpCAS::forceAuthentication();

关于discuz+supesite的单点登6,再领悟了php单点登入的原理后就须求改造discuz+supesite的报到代码了,discuz的为logging.php

supersite的为batch.login.php,作者是做java开辟的,对php不是很熟习,所以改换的以为不是很可相信,大约是先让discuz单点登6,获取用户名,依照用户

赢得数据库中的密码再付出discuz系统和睦的登6连串登入。discuz是运用cookie验证的,所以在java端退出后,discuz不会脱离。

若何人有更动很成功的能够沟通下。

 

参照网站:

http://www.discuz.net/thread-1416206-1-1.ht

相关文章

Leave a Reply

电子邮件地址不会被公开。 必填项已用*标注