注意:
Shiro-CAS支持已被弃用,支持已转移到基于Apache Shiro的buji-pac4j项目。
该四郎-CAS模块由保护与Web应用程序Jasig CAS SSO服务器。它使启用Shiro的应用程序成为CAS客户端。
- 如果要访问受CAS客户端保护的应用程序,并且未在此应用程序中进行身份验证,则CAS客户端会将您重定向到CAS服务器登录页面。CAS登录URL中的服务参数定义用户想要登录的应用程序。
http://application.examples.com/protected/index.jsp → HTTP 302 → https://server.cas.com/login?service=http://application.examples.com/shiro-cas
- 您填写登录名和密码并在CAS服务器中进行身份验证,然后CAS服务器将用户重定向到应用程序(服务URL),并在URL中包含服务票证。服务票证是在CAS服务器上可兑换用于用户标识符(以及可选地,用户属性)的短期一次性使用令牌。
https://server.cas.com/login?service=http://application.examples.com/shiro-cas → HTTP 302 → http://application.examples.com/shiro-cas?ticket=ST-4545454542121-cas
- 如果服务票证有效并且CAS服务器通过经过身份验证的用户的身份进行响应,则应用程序直接询问CAS服务器。通常,CAS客户端将用户转发到最初调用的受保护页面。
http://application.examples.com/shiro-cas?ticket=ST-4545454542121-cas → HTTP 302 → http://application.examples.com/protected/index.jsp
您需要在应用程序中添加shiro-cas Maven依赖项:
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-cas</artifactId>
<version>version</version>
</dependency>
(version> = 1.2.0)。
您必须定义应用程序的服务URL(必须在CAS服务器中声明)。此URL将用于接收CAS服务票证。例如:http://application.examples.com/shiro-cas
在shiro配置中,您必须定义CasFilter
:
[main]
casFilter = org.apache.shiro.cas.CasFilter
casFilter.failureUrl = /error.jsp
(当服务票证验证失败时,将调用失败URL)。
以及可用的网址:
[urls]
/shiro-cas = casFilter
这样,当CAS服务器使用有效的服务票证(验证后)将用户重定向到应用程序服务URL(_ / shiro-cas_)时,此过滤器接收服务票证并创建一个CasToken
,可以由CasRealm
。
该CasRealm
使用CasToken
由创建CasFilter
通过验证对CAS服务器的CAS服务票证来验证用户。
在shiro配置中,您必须添加CasRealm
:
[main]
casRealm = org.apache.shiro.cas.CasRealm
casRealm.defaultRoles = ROLE_USER
#casRealm.defaultPermissions
#casRealm.roleAttributeNames
#casRealm.permissionAttributeNames
#casRealm.validationProtocol = SAML
casRealm.casServerUrlPrefix = https://server.cas.com/ casRealm.casService = http://application.examples.com/shiro-cas
该casServerUrlPrefix是CAS服务器(例如:网址https://server.cas.com)。 该casService是应用服务URL,上至极该应用程序的URL接收CAS服务票证(例如:http://application.examples.com/shiro-cas)。 该validationProcol可以SAML或CAS(默认):属性和记得我的信息只推throught的SAML验证网络协议(除特定的自定义)。它取决于CAS服务器的版本:SAML协议可与CAS服务器版本> = 3.1一起使用。
注意:
如果选择SAML验证,则需要一些更具体的依赖项:
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
</dependency>
<dependency>
<groupId>org.opensaml</groupId>
<artifactId>opensaml</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>org.apache.santuario</groupId>
<artifactId>xmlsec</artifactId>
<version>1.4.3</version>
</dependency>
该defaultRoles是给CAS认证成功后通过认证的用户的默认角色。 在缺省权限是给CAS认证成功后通过认证的用户的默认权限。 所述roleAttributeNames定义了定义角色给予被认证的用户(该角色由昏迷分隔)从CAS响应中接收到的属性的名称。 所述permissionAttributeNames定义了定义权限给予到autnewhenticated用户(权限由昏迷分隔)从CAS响应中接收到的属性的名称。
在CAS服务器中,您可以拥有“记住我”的支持。此信息通过SAML验证或CAS自定义验证推送。
要在Shiro中反映CAS记住我的状态,您必须在Shiro配置中定义特定的CasSubjectFactory
:
[main]
casSubjectFactory = org.apache.shiro.cas.CasSubjectFactory
securityManager.subjectFactory = $casSubjectFactory
最后,您必须定义应用程序的安全性。
在您的Shiro配置中,您必须使用角色保护URL(例如):
[urls]
/protected/** = roles[ROLE_USER]
/** = anon
如果用户未经过身份验证,则使用应用程序服务URL在CAS服务器上定义登录URL:
[main]
roles.loginUrl = https://server.cas.com/login?service=http://application.examples.com/shiro-cas
这样,如果您未经过身份验证并尝试访问*/ protected / *** url,则会被重定向到CAS服务器以进行身份验证。
[main]
casFilter = org.apache.shiro.cas.CasFilter
casFilter.failureUrl = /error.jsp
casRealm = org.apache.shiro.cas.CasRealm
casRealm.defaultRoles = ROLE_USER
casRealm.casServerUrlPrefix = https://server.cas.com/ casRealm.casService = http://application.examples.com/shiro-cas
casSubjectFactory = org.apache.shiro.cas.CasSubjectFactory
securityManager.subjectFactory = $casSubjectFactory
roles.loginUrl = https://server.cas.com/login?service=http://application.examples.com/shiro-cas
[urls]
/shiro-cas = casFilter
/protected/** = roles[ROLE_USER]
/** = anon
版本1.2.0 :shiro-cas模块的第一个版本。