CAS Server部署

在了解了CAS是什么以及CAS的作用之后,我们可以开始体验对CAS的使用了。

首先下载CAS Server,下载路径:http://developer.jasig.org/cas/

当然也可以在github上下载cas server,但是放在github上的版本不再是用maven部署的项目了。

所以,如果你习惯使用maven,然后对版本没有太高的要求,可以在上面的网站下载,我们这里选用cas server 4.0版本。

然后我们将cas-server解压,将多模块maven项目导入到Eclipse。

cas server默认支持的请求方式是https ssl,所以如果我们想要使用简单的http请求来测试,那么我们需要对cas-server-webapp这个Maven项目里面的配置文件进行更改。

修改配置

0.修改 WEB-INF/deployerConfigContext.xml

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

中添加 p:requireSecure=”false”

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

1.修改WEB-INF/spring-configuration/ticketGrantingTicketCookieGenerator.xml

    <bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
        p:cookieSecure="true"
        p:cookieMaxAge="-1"
        p:cookieName="CASTGC"
        p:cookiePath="/cas" />

将p:cookieSecure=”true”修改为p:cookieSecure=”false”

    <bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
        p:cookieSecure="false"
        p:cookieMaxAge="-1"
        p:cookieName="CASTGC"
        p:cookiePath="/cas" />

2.修改WEB-INF/spring-configuration/warnCookieGenerator.xml

    <bean id="warnCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
        p:cookieSecure="true"
        p:cookieMaxAge="-1"
        p:cookieName="CASPRIVACY"
        p:cookiePath="/cas" />

也是将p:cookieSecure=”true”修改为p:cookieSecure=”false”

    <bean id="warnCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
        p:cookieSecure="false"
        p:cookieMaxAge="-1"
        p:cookieName="CASPRIVACY"
        p:cookiePath="/cas" />

3.如果该程序所在的tomcat服务器端口不是默认的8080,那么就需要修改WEB-INF/cas.properties

server.name=http://localhost:8080

将端口修改,当然如果有在hosts里配置域名的话,也可以把localhost替换成域名。

完成了这些后,我们就可以用tomcat来启动cas-server-webapp这个项目了。

访问CAS

我并没有更改tomcat端口,也咩有使用域名,这个时候我们访问10.18.1.132:9060/cas/

我们会来到默认的登陆页面。

注意:在某些教程中,你会看到说我们只需要输入相同的用户名和密码就可以通过校验,但是在cas server 4.0及以后的版本中,用户名和密码不再是简单的相同就可以通过验证了,而是给出了一个配置文件用来配置默认的登陆用户名和密码,系统默认设置的只有一个 casuser/Mellon。这个配置在deployerConfigContext.xml,primaryAuthenticationHandler这个bean中。

CAS Client部署

我们现在已经把Server端部署好了,接下来就需要部署client端了。

0.新建两个Maven web app项目:testapp1,testapp2。

1.对两个项目就行简单配置。

首先我们需要引入cas-client的相关包。

在pom.xml中加入

    <dependency>
    <groupId>org.jasig.cas.client</groupId>
    <artifactId>cas-client-core</artifactId>
    <version>3.2.1</version>
</dependency>
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.16</version>
</dependency>

然后我们需要在web.xml中配置一些过滤器以及监听器。

 <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>CAS Filter</filter-name>
    <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
    <init-param>
        <param-name>casServerLoginUrl</param-name>
        <param-value>http://localhost:8080/cas/login</param-value>
    </init-param>
    <init-param>
        <param-name>serverName</param-name>
        <param-value>http://localhost:8081/</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CAS Filter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<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>http://localhost:8080/cas</param-value>
    </init-param>
    <init-param>
        <param-name>serverName</param-name>
        <param-value>http://localhost:8081</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CAS Validation Filter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<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>

注意:CAS FIlter和CAS Validation Filter中对serverName这个init-param的value是不一样的,具体不同看配置。

还有这里我们使用了不同的端口,这里的tomcat端口已经不是8080了,而是8081。

而对于testapp2的配置,我们只需要做下相应的更改就好了,testapp2对应的tomcat端口为8082。

如何在不同的tomcat端口中部署项目

当我们对testapp1和testapp2都部署好了之后。我们就需要在tomcat中启动他们,但是与我们平时启动项目不一样,因为我们不想再让这两个项目在默认的tomcat端口中部署了。那需要怎样部署呢?

我是使用Eclipse里的Tomcat来进行部署的,也就是需要对servers这个项目的server.xml进行更改。

添加以下内容。

<Service name="Catalina1">





        <Connector connectionTimeout="20000" port="8081" protocol="HTTP/1.1"
            redirectPort="8443" />



        <Connector port="8001" protocol="AJP/1.3" redirectPort="8443" />



        <Engine defaultHost="localhost" name="Catalina1">



            <Realm className="org.apache.catalina.realm.LockOutRealm">

                <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
                    resourceName="UserDatabase" />
            </Realm>

            <Host appBase="wtpwebapps" autoDeploy="true" name="localhost"
                unpackWARs="true">


                <Valve className="org.apache.catalina.valves.AccessLogValve"
                    directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log."
                    suffix=".txt" />

                <Context docBase="testapp1" path="/testapp1" reloadable="true"
                    source="org.eclipse.jst.j2ee.server:testapp1" />

            </Host>
        </Engine>
    </Service>
    <Service name="Catalina2">





        <Connector connectionTimeout="20000" port="8082" protocol="HTTP/1.1"
            redirectPort="8443" />



        <Connector port="8002" protocol="AJP/1.3" redirectPort="8443" />



        <Engine defaultHost="localhost" name="Catalina2">



            <Realm className="org.apache.catalina.realm.LockOutRealm">

                <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
                    resourceName="UserDatabase" />
            </Realm>

            <Host appBase="wtpwebapps" autoDeploy="true" name="localhost"
                unpackWARs="true">


                <Valve className="org.apache.catalina.valves.AccessLogValve"
                    directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log."
                    suffix=".txt" />

                <Context docBase="testapp1" path="/testapp1" reloadable="true"
                    source="org.eclipse.jst.j2ee.server:testapp2" />

            </Host>
        </Engine>
    </Service>

这里我在第一次配置的时候出现了问题,当时是直接把已经部署好了的cas-server的配置粘过来改的。其中Host节点的appBase属性对应的值是webapps,然后我们更改了相应的端口号之后,我们启动Tomcat,发现报错,提示找到不到相应的文件:

D:\UM\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\webapps\testapp1

,然后到相应的位置找,确实是没有,但是却在wtpwebapps中找到了,然后把appBase的属性值改为wtpwebapps再运行,发现无误。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐