SpringMvc 下集成shiro与cas

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringMvc 下集成shiro与cas相关的知识,希望对你有一定的参考价值。

  由于内部系统越来越多,单点登录已经是一个较优选择。之前各个系统都集成了shiro作为权限管理,

所以必须要把shiro与cas集成。

  集成步骤:

首先在POM中引入shiro-cas包

<dependency>
  <groupId>org.apache.shiro</groupId>
  <artifactId>shiro-cas</artifactId>
  <version>1.2.2</version>
</dependency>

添加一个MyCasRealm继承CasRealm,在其中重写doGetAuthorizationInfo方法,用于设置权限

@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {

  String username = (String)principals.getPrimaryPrincipal();
  SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();
  authorizationInfo.setRoles(roles);
  authorizationInfo.setStringPermissions(permission);
  return authorizationInfo;
}

 

在springShiro.xml(系统内部shiro配置文件)中添加

 

<bean id="casRealm" class="com.shijie99.order.common.shiro.MyCasRealm">
  <property name="cachingEnabled" value="true"/>
  <property name="authenticationCachingEnabled" value="true"/>
  <property name="authenticationCacheName" value="authenticationCache"/>
  <property name="authorizationCachingEnabled" value="true"/>
  <property name="authorizationCacheName" value="authorizationCache"/>
  <property name="casServerUrlPrefix" value="http://127.0.0.1:8080/cas"/>
  <property name="casService" value="http://127.0.0.1:8580/innersystem/cas"/>
</bean>

 

<bean id="casFilter" class="org.apache.shiro.cas.CasFilter">
<property name="failureUrl" value="/unauthorized"/>
</bean>

 

在shiroFilter中添加

<property name="loginUrl" value="http://127.0.0.1:8080/cas?service=http://127.0.0.1:8580/innersystem/cas"/>

在filters中添加

<entry key="cas" value-ref="casFilter"/>

在其filterChainDefinitions中添加

 /cas = cas

 

<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager"/>
<property name="loginUrl" value="http://127.0.0.1:8080/cas?service=http://127.0.0.1:8580/innersystem/cas"/>
<property name="filters">
<util:map>
<!-- <entry key="authc" value-ref="formAuthenticationFilter"/> -->
<entry key="sysUser" value-ref="sysUserFilter"/>
<entry key="cas" value-ref="casFilter"/>
</util:map>
</property>
<property name="filterChainDefinitions">
<value>
/unauthorized = anon
/cas = cas
/logout = logout
/resources/** = anon
/** = user
</value>
</property>
</bean>

 

需要注意的是,之前在casRealm中存在

<property name="credentialsMatcher" ref="credentialsMatcher"/> 

这个配置,集成后一直报重定向循环。

由于credentialsMatcher是继承了HashedCredentialsMatcher,这个方法认证ticket是用

char[]类型的,导致类型转换失败。而之前没有配置失败URL,所以一直重定向。

 

以上是关于SpringMvc 下集成shiro与cas的主要内容,如果未能解决你的问题,请参考以下文章

Shiro权限框架与SpringMVC整合

Shiro框架与SpringMVC之间的冲突

安全框架 - Shiro与springMVC整合的注解以及JSP标签

在没有可可的情况下集成 Firebase 没有这样的模块“Firebase”?

请教Apache Shiro 与spring3登录问题

web中集成shiro