集成Shiro与CAS3.5:简化登录流程与自定义Realm配置

需积分: 10 9 下载量 32 浏览量 更新于2024-09-09 收藏 18KB DOCX 举报
本文档主要介绍了如何正确地将Apache Shiro框架与CAS (Central Authentication Service) 版本3.5进行整合。Shiro是一个强大的Java安全框架,常用于实现身份验证和授权管理,而CAS则是一个集中式身份验证服务,用于简化单点登录(Single Sign-On, SSO)。下面是详细的整合步骤: 1. 依赖引入: 首先,确保在项目中添加shiro-cas的核心依赖。在Maven项目的pom.xml文件中,添加以下依赖: ```xml <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-cas</artifactId> <version>1.2.4</version> </dependency> ``` 这个版本号可以根据实际项目需求选择,但1.2.4是一个可用的示例。 2. 配置Shiro Filter: 在`application-shiro.xml`配置文件中,需要替换默认的FormAuthenticationFilter。创建一个自定义的CasAuthenticationFilter,并配置它作为授权拦截器: ```xml <bean id="authcFilter" class="com.zcj.filter.CasAuthenticationFilter"/> <property name="filters"> <util:map> <entry key="authc" value-ref="authcFilter"/> </util:map> </property> ``` 这里,`CasAuthenticationFilter` 是根据CAS协议定制的,它将负责从CAS服务器获取用户信息。 3. 调整Shiro Realm: Shiro的Realm是存储和验证用户凭证的地方。由于CAS已经完成了密码验证,所以在自定义的ShiroDbRealm中,不需要再进行密码匹配。设置一个`AllowAllCredentialsMatcher` 来忽略密码验证: ```xml <bean id="shiroDbRealm" class="com.zcj.shiro.ShiroDbRealm"> <property name="credentialsMatcher"> <bean class="org.apache.shiro.authc.credential.AllowAllCredentialsMatcher"/> </property> </bean> ``` 这样可以避免在登录成功后因密码为空引发的死循环问题。 4. 理解流程: 整合完成后,用户的登录流程如下: - 用户尝试访问受保护的资源,Shiro检测到需要认证,然后调用`CasAuthenticationFilter`。 - `CasAuthenticationFilter` 发起CAS登录请求,获取用户名(没有密码)。 - CAS验证用户名和可能的其他凭据,如果成功,会返回一个token。 - `CasAuthenticationFilter` 将这个token传递给Shiro,Shiro继续进行授权检查。 - 如果授权通过,用户可以直接访问受保护的资源,无需再次输入密码。 Shiro整合CAS3.5的关键在于定制`CasAuthenticationFilter`、配置 Realm 和正确处理认证流程。这样就可以实现安全的单点登录,简化用户的登录体验。