集成Shiro与CAS3.5:简化登录流程与自定义Realm配置
需积分: 10 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 和正确处理认证流程。这样就可以实现安全的单点登录,简化用户的登录体验。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2017-11-04 上传
2017-11-04 上传
2021-05-01 上传
2021-04-30 上传
2018-06-29 上传
hanght
- 粉丝: 0
- 资源: 4
最新资源
- getting started with JBoss4.0 中文版
- SQL语法大全中文版(其中两章)
- 开源_200903.pdf
- C语言趣味程序百例精解
- 动态场景下的运动目标跟踪方法研究.pdf
- 英语词根词缀记忆大全
- DS1302_中文资料.pdf
- How to solve it: A new aspect of mathematical method
- 美国MIT EECS系本科生课程设置简介
- 小程序(在网页上找Email地址)
- C#完全手册(新手学习C#必备手册)
- 数字信号处理、计算、程序、
- 详细设计说明书案例.DOC
- 课程设计航空客运订票系统
- JSF自定义组件 JSF自定义组件
- Visual C++与Matlab混合编程