cas 配置

1.        启用TOMCAT的SSL
把.keystore文件复制到TOMCAT的CONF目录下面。
在TOMCAT的主目录的CONF目录下面,修改server.xml文件,加上以下代码
<Connector port="8443" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" disableUploadTimeout="true"
               acceptCount="100" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS"
               keystoreFile="conf/.keystore"
               keystorePass="changeit"
               />
其中的keystoreFile是证书库文件,keystorePass是访问此证书库文件的密码。
注:keystore文件可以用以下方法生成。
Keytool –genkey –alias hostname –keyalg RSA(在接下来的第一项是名称,记住最好是和hostname同一名称)执行此操作会在用户的当前目录(user.home)下产生一个名为.keystore的文件。如果已经有了,将自动把新产生的KEY放进文件里面(此次的hostname是运行CAS服务器的名字.不要搞错,否则会在以后验证出错的.如果你是在本地测试,则用localhost就OK了)
2.        导入证书文件到各个应用的JRE的JVM里面
首先产生一个证书文件,用以下方法:
Keytool –export –alias hostname –file filename.cer
这样就在用户当前产生了一个名为filename.cer的文件
接下来就把此文件导入到各应用的的JVM里面
Keytool –import –alias hostname –file filename –keystore {java_home}/jre/lib/security/cacerts
注:如果你的JAVA_HOME里面有空格,请用引号括住。
3.        把cas.war包复制到TOMCAT的WEBAPPS下面,然后用http://localhost:8080/cas/login就可以访问登陆了

改写验证方法。CAS的默认方验证方法是用户名和密码相同,如果想改为自己的验证方式,如何做呢?你只需复制以下代码,然后在适当的地方插入你的验证代码就OK了。
package org.jasig.cas.authentication.handler.support;

import org.jasig.cas.authentication.principal.UsernamePasswordCredentials;
import org.springframework.util.StringUtils;

public final class classname extends
    AbstractUsernamePasswordAuthenticationHandler {

    public boolean authenticateUsernamePasswordInternal(
        final UsernamePasswordCredentials credentials) {
        final String username = credentials.getUsername();
        final String password = credentials.getPassword();

        if (在此插入你的验证代码) {
            getLog().debug(
                "User [" + username + "] was successfully authenticated.");
            return true;
        }

        getLog().debug("User [" + username + "] failed authentication");

        return false;
    }

    protected void afterPropertiesSetInternal() throws Exception {
        super.afterPropertiesSetInternal();
        getLog()
            .warn(
                this.getClass().getName()
                    + " is only to be used in a testing environment.  NEVER enable this in a production environment.");
    }
}

然后,修改deployerConfigContext.xml(在CAS的WEB-INF目录下面)
找到
<bean                        class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />
把class改为你自己写的验证的类就OK了。
到此,服务器端的配置就完成了。
接下来是各个应用的配置:

4.(以JAVA的配置为例子)把casclient.jar包复制到应用的lib目录下面,如果没有就创建它。然后再在应用的部署描述文件里面(web.xml)加上filter。如下:
<filter>
    <filter-name>CAS Filter</filter-name>
    <filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class>
    <init-param>
      <param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name>
      <param-value>https://casServerhost:8443/cas/login</param-value>
    </init-param>
    <init-param>
      <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
      <param-value>https:// casServerhost:8443/cas/proxyValidate</param-value>
    </init-param>
    <init-param>
      <param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
      <param-value>localhost:8080</param-value>
    </init-param>
  </filter>
<filter-mapping>
  <filter-name>CAS Filter</filter-name>
  <url-pattern>/servlet/*</url-pattern>
</filter-mapping>

Localhost是指各个应用的服务器的名字
casServerHost是指cas服务器的名字
其中的filter-mapping就是配置哪些资源是需要通过CAS验证的。可以配置多个。

4.        配置语言包
在cas里面的WEB-INF/classes下面添加不同的语言包,然后再在/WEB-INF/view/jsp/default/ui/includes的top.jsp文件顶部加入<%@ page contentType="text/html; charset=gbk" language="java" %>便可以了。

一些错误信息:
1.        keytool 认证未输入别名 <mykey> 已经存在
这是因为你已经导入了一信任证书。在进行keytool –import的时候,如果没有指定别名,则系统默任导入的证书的名字为mykey,所以,可以先删除此证书keytool –delete –alias mykey –keystore {java_home}/jre/lib/security/cacerts
然后再从新导入,或者指定别名导入keytool –import –alias name –keystore {java_home}/jre/lib/security/cacerts

2.        java.io.IOException: Keystore was tampered with, or password was incorrect
这个很可能你的keystore文件已经被修改了,密码已经更改,直接删除这个文件,再从新生成就可以了
3.        javax.servlet.ServletException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
这是因为你没有在应用端导入证书。在应用端执行keytool –import –alias name –file filename.cer便可以。其中的name.cer是在前面的用keytool –export导出的cer文件  

本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/HuDon/archive/2007/02/06/1503234.aspx

### CAS (Central Authentication Service) 单点登录系统的配置方法 #### 1. CAS Server 的配置 CAS Server 是整个单点登录系统的核心组件,负责执行用户的身份验证操作。以下是其主要配置步骤: - **安装与部署**: 可以下载官方发布的 Jasig CAS Server 版本并将其部署到支持 Java EE 的应用服务器上(如 Apache Tomcat)。这一步骤通常涉及解压文件并将 WAR 文件放置在应用服务器的 `webapps` 目录下[^1]。 - **认证方式的选择**: 配置 CAS Server 支持不同的认证机制,比如基于 LDAP、数据库或者内存中的用户列表。例如,在使用 LDAP 认证的情况下,需要编辑 `deployerConfigContext.xml` 文件来指定 LDAP 连接参数和查询语句[^2]。 ```xml <!-- Example of configuring an LDAP authentication handler --> <bean id="ldapAuthenticationHandler" class="org.jasig.cas.adaptors.ldap.LdapAuthenticationHandler"> <property name="filter" value="uid=%u"/> <property name="contextSource" ref="contextSource"/> </bean> <bean id="contextSource" class="org.springframework.ldap.core.support.LdapContextSource"> <property name="url" value="ldap://your-ldap-server:389"/> <property name="base" value="dc=example,dc=com"/> <property name="userDn" value="cn=admin,dc=example,dc=com"/> <property name="password" value="secret"/> </bean> ``` - **票据存储设置**: 默认情况下,CAS 使用内存作为票据存储介质,但在高可用环境下建议切换至 Redis 或其他持久化方案以提高可靠性。 #### 2. CAS Client 的集成 为了使各个 Web 应用能够参与单点登录流程,需在其内部引入 CAS 提供的客户端库,并完成必要的初始化工作。 - **Java 客户端示例**: 对于 Spring Boot 类型的应用程序来说,可以通过 Maven 添加依赖项以便快速启用功能[^5]。 ```xml <!-- Add dependency for CAS client support in pom.xml --> <dependency> <groupId>org.apereo.cas.client</groupId> <artifactId>cas-client-core</artifactId> <version>3.x.y</version> </dependency> ``` - **Filter 注册**: 创建自定义过滤器链用于拦截未授权请求,并引导它们跳转至 CAS 登录页面接受进一步审查。 ```java @Bean public CasAuthenticationEntryPoint casAuthenticationEntryPoint() { final CasAuthenticationEntryPoint entryPoint = new CasAuthenticationEntryPoint(); entryPoint.setLoginUrl("https://cas.example.com/login"); entryPoint.setServiceProperties(serviceProperties()); return entryPoint; } private ServiceProperties serviceProperties() { final ServiceProperties properties = new ServiceProperties(); properties.setService("http://localhost:8080/secure/home.jsp"); properties.setSendRenew(false); return properties; } ``` #### 总结 以上描述涵盖了从基础架构搭建直至业务逻辑嵌入的关键环节。值得注意的是,实际场景下的实施可能还会牵涉额外的安全加固措施以及性能优化考量等因素[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值