以下皆为cas服务器端的设置
cas.properties文件里的可配置项
路径: WebRoot/WEB_INF/cas.prpperties
- server.name=http://localhost:8080 设置cas服务器的访问路径
- server.prefix=${server.name}/cas 指定cas应用的访问前缀 默认无须改变
- cas.securityContext.serviceProperties.service=${server.prefix}/services/j_acegi_cas_security_check 暂时不了解
- cas.securityContext.serviceProperties.adminRoles=ROLE_ADMIN
- cas项目使用spring security 安全框架.
- cas有前端可访问的管理页面.只有有ROLE_ADMIN角色的人才有权限访问管理页面.
- 管理页面访问地址: ${server.name}/cas/services/manage.html ```xml 为用户333授予ROLE_ADMIN权限
```
- host.name=cas01.example.org 生产的cas服务器的域名
- database.hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect 数据库方言
- cas.logout.followServiceRedirects=true
- 当你访问cas服务器带参数service 例如
http://localhost:8080/cas/login?service=http%3A%2F%2Flocalhost%3A8080%2Fcas%2Fservices%2Fj_acegi_cas_security_check
cas会通知浏览器重定向到service参数值对应的地址 - cas登出的url为/cas/logout 用户发起注销登陆后,浏览器会重定向到此地址.cas服务器会显示默认的注销成功页面
- 假设有两个应用系统,A和B 都接入了cas中央认证.想让用户在A系统登出后,跳转回A系统的页面,可以在登出url后缀上service参数.
- 此项设置为true,代表登出后如果有参数会重定向
- 当你访问cas服务器带参数service 例如
- tgt.maxTimeToLiveInSeconds=32400
- 此项代表tgt票据的存活时间
- 单位是秒,此处代表9小时.即一个tgt最长活不过9小时
- tgt的维护是由一个定时job去管理的.可以设置每隔多长时间进行清理.
job定义在
spring-configuration/ticketRegistry.xml
中 ```xml
此处每隔300000s重复清理过期的tgt ```
- tgt.timeToKillInSeconds=7200
- 此项网上多说是用户鼠标无操作的时间,即7200s无操作即删除tgt,但不知道cas服务器是怎么知道用户无操作的
- cas.timeToDieInSeconds=2
- 此项是关键配置项.建议生产维持2不变.开发打断点时必须调大
- cas接收别人的认证请求.如果在两秒内没有验证成功,为了服务的稳定性,会强行杀掉此session.避免dos攻击.
- 开发过程,不调大,会报错.
cas-servlet.xml
deployerConfigContext.xml
- 配置sql
<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"> <property name="sql"><!-- 查询状态不能为0 的 0是离职 --> <value>select password from t_system_system_staff where login_id=? and status<>0</value> </property> <property name="dataSource" ref="dataSource" /> <property name="passwordEncoder" ref="MD5PasswordEncoder" /> </bean>
配置查询语句,并加状态判断,配置MD5
- 配置数据源
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> </property> <property name="url"> <value>jdbc:mysql://192.168.1.16:3306/eap</value> </property> <property name="username"> <value>root</value> </property> <property name="password"> <value>123456</value> </property> </bean>
以上是根据文件位置配置
以下是根据功能配置
使用https
WebRoot\WEB-INF\spring-configuration\ticketGrantingTicketCookieGenerator.xml文件内只有一个bean定义
如果使用https 必须将p:cookieSecure
设置为true.反之若使用http,必须设置为false.否则会造成用户无法注销.
登录成功默认跳转地址
- 如果登录验证带有service参数,成功后会定向到service的地址
- 如果没有service参数,默认是显示登陆成功的信息.
cas\WebRoot\WEB-INF\login-webflow.xml
内搜索<end-state id="viewGenericLoginSuccess" view="externalRedirect:http://localhost:8085" />
此处使用了工作流,修改view后的地址,即可直接跳转到指定的地址.
验证码
- 增加jar kaptcha-2.3.2.jar(google)
- login-webflow.xml ```xml
3. `UsernamePasswordCredentialsHF.java` 实体类添加
```xml
<var name="credentials"
class="com.***.cas.authentication.principal.UsernamePasswordCredentialsHF" />
-
\cas\src\com\***\cas\web\flow\AuthenticationViaFormActionHF.java
验证action添加BadAuthcodeAuthenticationExceptionHF.java NullAuthcodeAuthenticationExceptionHF.java
关于验证码的两个方法 - casLoginView.jsp 登录界面增加验证码的div的input框
- 增加messages_zh_CN.properties.国际化提示
登录密码错误次数上限设置\登录日志记录
cas\WebRoot\WEB-INF\spring-configuration\throttleInterceptorTrigger.xml
- 目前修改后的版本可以自定义设置:
<bean id="throttleInterceptor" class="com.***.cas.web.support.InMemoryThrottledSubmissionByIpAddressAndUsernameHandlerInterceptorAdapterHF" //没有用到 p:failureRangeInSeconds="28800" p:failureRangeInHours="24" p:failureThreshold="5" p:dataSource-ref="dataSource" p:insertLoginLogsql="insert into t_staff_login_log values(?,?,?)" p:updateErrorLoginNumSql="update t_system_system_staff set login_error_num = login_error_num+1,last_error_time=NOW() where login_id = ? " p:queryErrorLoginNumSql="select login_error_num,last_error_time from t_system_system_staff where login_id = ? " p:successSql="update t_system_system_staff set login_error_num = 0,last_error_time=null where login_id = ? " />
-
逻辑: 如果登录失败一次(验证码失败),不计入失败次数 如果密码错误,失败次数+1,修改最后一次的失败时间 如果登录成功,失败次数清零.最后一次失败次数为null 如果连续失败次数>=5.cas服务器判断当前时间与最后一次错误次数的差值,如果小于24小时,拒绝服务. 可在此处修改sql语句.
- 主要涉及类
com.***.cas.web.support.AbstractInMemoryThrottledSubmissionHandlerInterceptorAdapterHF com.***.cas.web.support.AbstractThrottledSubmissionHandlerInterceptorAdapterHF com.***.cas.web.support.InMemoryThrottledSubmissionByIpAddressAndUsernameHandlerInterceptorAdapterHF
cas server 技术点
- spring mvc
- spring security
- spring web flow
票据
- tgt-一个登录用户对应一个tgt,只存在于cas server中.
- tgc tgt的key.由cas server 写入cookie cookie头为CASTGC 会设置httponly securi属性
- st 一个st默认使用一次就会销毁
- 还有其他票据用于更复杂的代理网络等.