源于自身的村办网站。默认地址。

起源自身的私家网站:http://lkf.22web.org/

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

WEB-INF目录

1.cas.properties文书(打开关闭SSL,主题,定制页面设置)

#默认端口配置

#server.name=http://localhost:8080
server.name=http://localhost:8080
#默认地址
#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/ticketGrantingTicketCookieGenerator.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>

4.字符编码设置

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=”http://www.springframework.org/schema/beans”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xmlns:p=”http://www.springframework.org/schema/p”
xmlns:c=”http://www.springframework.org/schema/c”
xmlns:tx=”http://www.springframework.org/schema/tx”
xmlns:util=”http://www.springframework.org/schema/util”
xmlns:sec=”http://www.springframework.org/schema/security”
xsi:schemaLocation=”http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.2.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd"&gt;

<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>

7.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>

8.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

上述JAR包添加至WEB-INF/lib/目录下面

10.有数量表脚本

/****** 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的要害的布基本好

 

http://www.bkjia.com/Javabc/1205764.htmlwww.bkjia.comtruehttp://www.bkjia.com/Javabc/1205764.htmlTechArticleCAS配置(2)之主配置,cas配置 WEB-INF目录
1.cas.properties文件(打开关闭SSL,主题,定制页面设置) #默认端口配置
#server.name=http://localhost:8080…

cas介绍:

CAS 是 Yale 大学倡导的一个开源项目,旨在为 Web
应用体系提供平等种保险的无非点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG
的一个类别。CAS 具有以下特征:

  • 开源之店家级单点登录解决方案。
  • CAS Server 也需要独自布置的 Web 应用。
  • 支持好多之客户端(这里指单点登录体系受之逐条 Web 应用),包括 Java,
    .Net, PHP, Perl, Apache, uPortal, Ruby 等。

CAS 原理与商

从今组织及看,CAS 包含两个组成部分: CAS Server 和 CAS Client。CAS Server
需要独自布置,主要负责对用户之印证工作;CAS Client
负责处理对客户端受保护资源的走访请求,需要报到时,重定向到 CAS
Server。图1 是 CAS 最核心的商事进程:
图 1. CAS 基础协议

CAS Client 与于保障之客户端应用部署在共,以 Filter
方式维护于保障之资源。对于访问被保障资源的每个 Web 请求,CAS Client
会分析该要的 Http 请求中是否带有 Service
Ticket,如果没有,则证实时用户并未登录,于是以请求重定向到指定好之 CAS
Server 登录地址,并传递 Service
(也不怕是如拜访的目的资源地址),以便登录成功后退回该地方。用户在第 3
步着输入认证信息,如果登录成功,CAS Server
随机产生一个相当长、唯一、不可伪造之 Service
Ticket,并缓存以得将来认证,之后系统活动重定向到 Service
所在地方,并也客户端浏览器设置一个 Ticket Granted Cookie(TGC),CAS
Client 以用到 Service 和新发的 Ticket 过后,在第 5,6 步着与 CAS
Server 进行身份合适,以管教 Service Ticket 的合法性。

于拖欠谋中,所有和 CAS 的互动均使用 SSL 协议,确保,ST 和 TGC
的安全性。协议工作过程遭到会有 2 次重定向的进程,但是 CAS Client 与 CAS
Server 之间展开 Ticket 验证的经过对于用户是透明的。

此外,CAS 协议中尚提供了 Proxy
(代理)模式,以适应更高档、复杂的利用场景,具体介绍好参照 CAS
官方网站上的有关文档。

CAS服务器端配置

布服务器环境

第一下充斥必须的软件:

Tomcat6.0: http://tomcat.apache.org/download-60.cgi
Windows Service Installer

Jdk: http://java.sun.com/javase/downloads/index.jsp
君得选择含 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安装的门道。

2.装JDK相关的环境变量
1).切换到桌面,右键点击“我之微处理器” -> 属性 -> 高级 -> 如图
建立一个 JAVA_HOME 环境变量,变量值为JDK的根目录。

2).和方一样的操作,建立 环境变量 CLASSPATH,值为
“.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\jre\lib\rt.jar”

3).还是操作环境变量但无是新建,而是修。编辑 Path
变量,最变量值最后对丰富 ;%JAVA_HOME%\bin;

3.安装Tomcat
1).一简直下一样步,中间用选择设置路径和 JVM
目录,如果JDK和JRE安装没问题,这里外该能够自动搜索得到,否则需你手动指定一下。
中间什么也未用无,有一致管辖被你设置端口,不用动,保持默认的便执行了。

2).新添一个 CATALINA_HOME 环境变量,变量值为公TOMCAT安装时的一干二净目录。

3.测试运行服务器

装后的bin目录共有一下几只文件:
bootstrap.jar
tomcat-juli.jar
tomcat6.exe
tomcat6w.exe
内tomcat6w.exe是监控tomcat运行的,可以直接运行,或者缩小至屏幕右下比赛成为一个略图标。
直接运行tomcat6w.exe或者“tomcat6w //ES//” 都可以入监控配置窗口;
或运行“tomcat6w //MS//”把它缩小至右手下角。

为可用startup.bat和shutdown.bat 来启动暨关服务。
web访问测试
起步后,可以经浏览器进行访问,测试运行是否正常。
故IE或者Firefox等浏览器,输入地点:
http://localhost:8080/      
–如果设置时修改了端口,请把8080所以修改后的价值替换。
比方能健康浏览到tomcat欢迎信息,就是不利了,否则将检查装置是否对、防火墙的装等。
时常遇上的一个问题是端口冲突,最常见的虽是80端口被占据,导致服务无法正常启动。如果经过tomcat6
//TS//tomcat6来启动,马上便可知发现提示信息。修改一下tomcat6\conf\server.xml中之端口就能缓解。

通常用80端口之起:
1.
IIS服务器,因为于windows服务器上,很多还安了IIS,而IIS默认的端口就是80.
2.
skype就经常聊天工具,skype的足穿透防火墙的本领,也是通过占据80端口实现之。

查看端口占用的吩咐:
进入windows命令行,输入:
netstat -an
其一令归来来4排:protocol协议、local address本机地址、foreign
address来访者地址、status状态
浏览本机地址一样排,可以观看眼前主机对外服务之IP地址、端口都起什么。
一经一致大机器发出192.168.1.100暨192.168.1.101点儿只地方,那么:
0.0.0.0:80意味这大机械及拥有80端口还叫利用
127.0.0.1:80意味着127.0.0.1的80吃运,但.100和.101IP地址的80还非下。
192.168.1.100:80申明示.100IP地址的80端口受采取
192.168.1.101:80阐明示.101IP地址之80端口叫应用

 

 

 

部署 CAS Server

CAS Server 是平等学基于 Java 实现之服务,该服务为一个 Java Web Application
单独安排于同 servlet2.3 兼容的 Web 服务器上,另外,由于 Client 与 CAS
Server 之间的交互使用 Https 协议,因此部署 CAS Server 的服务器还需支持
SSL 协商。当 SSL 配置成功了后,像普通 Web 应用相同以 CAS Server
部署在服务器上就能健康运作了,不过,在审以前,还亟需扩大验证用户的接口。

 

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意味100年,默认值是90天

留意要一旦搁c盘,在win7相关统下,需要坐管理人身份上及令行中进行操作,否则是心有余而力不足缔造tomcat.keystore的。本例放到d盘下。
怎样为管理员身份上及令行下呢?开始->搜索框中输入cmd->等待(注意不回车)->出现cmd.exe->右键“以管理人身份运行”即可。

3、输入keystore密码

密码轻易,此处为123456啊条例,要记住是密码,之后于进展server.xml配置时需要运用。

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

注意事项:

A、Enter keystore password:此处需要输入大于6只字符的字符串

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、Tomcat启动成功后,使用https://127.0.0.1:8443 访问页面

页面成功开拓就是tomcat下之https配置成功。

 

9、注意事项:

(1)    生成证书的时刻,如果IE客户端所在机器的工夫早于证书生效时间,或者晚于有效时间,IE会提示“该安全关系已经临或还非奏效”

(2)    如果IE提示“安全证明及之名无效或跟站点名称不匹配”,则是由生成证书时填写的服务器所于主机的域名“您的名与姓氏是呀?”/“What
is your first and last name?”不正确引起的

 

10、遗留问题:

(1)如果AC主机不可知通过域名查找,必须采取IP,但是这个IP只有当配备后才会确定,这样证书就务须在AC确定IP地址后才会非常成

(2)证书文件只能绑定一个IP地址,假设有10.1.25.250 和 192.168.1.250 两个IP地址,在证明生成文书时,如应用了10.1.25.250,通过IE就不得不动用10.1.25.250 来聘AC-WEB,192.168.1.250凡是无法访问AC-WEB的。

 

 

配置CAS
  1. 下载cas 
    http://www.ja-sig.org/downloads/cas/cas-server-3.4.2-release.zip
  2. 设置cas-server,我们若安装cas-server的服务器也server1

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

(2)     生成server1的安全关系:

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

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

-file D:/file.cer 即为转的cer文件,可直接点击安装

(3)     重新启航server1上之tomcat,检验cas配置是否成,访问https://ip或域名:8443/cas/login,如果能够看cas的报到页面则代表配置成功。

cas客户端配置

1、准备CAS的PHP库和相关库文件

1)下载 cas php客户端
http://downloads.jasig.org/cas-clients/php/current/CAS-1.3.1.tgz

2) 由于该之所以到了PEAR的DB库,需要下载

http://pear.php.net/get/PEAR-1.7.1.tgz

http://pear.php.net/get/DB-1.7.13.tgz

自不肯定是自说之版,但自我被的凡自家考成功之本子。

3)
用于采取及了SSL所以需要下载openssl。当然我是于windows环境下考查的,下载的windows版本。

4)安装openssl。

2、配置PHP环境

1)将CAS-1.3.1.tgz、PEAR-1.7.1.tgz、DB-1.7.13.tgz放在和一个目如图。

4)由于phpcas用到了CURL(用于连接ssl),因此用保证php解释环境亟待来这个扩展。需要做的便是改ini文件将extentions节生的荫符号去丢,然后便是反省PHP环境的extentions目录下是否发生照应之.dll。一般标准设置都见面起。

3、测试CAS的php客户端

1)在CAS-1.3.1.tgz中的docs/examples文件夹拷贝到网站的干净目录下。

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

3)打开config.php 进行改动

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

会见跳反至CAS服务器登录页面。默认只要用户称和密码相同便可以通过验证。

 

登陆成功后会受改到客户端。提示验证成功。

 

其余客户端的布置按以上步骤配置。即可兑现单点。

 

 

 

 

 

 

 

 

 

进阶

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

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

添加jar

用数据库让包:mysql-connector-java-5.1.5-bin.jar
cas-server-support-jdbc-3.x.x.jar(来自于\cas-server-3.4.2\modules)
copy到cas/WEB-INF/lib/下

创办验证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下)

正文自 南柯一梦境的小站,转载时恳求注明出处和相应链接。

本文永久链接: http://lkf.22web.org/?p=5

相关文章