`

cas client 4.0 整合 shiro

阅读更多

 

概念或其它内容可以参考我一系列的博客相关文章 http://sgq0085.iteye.com/category/302777

 

1.Maven主要依赖

 

<dependency>
    <groupId>org.jasig.cas.client</groupId>
    <artifactId>cas-client-core</artifactId>
    <version>3.3.3</version>
</dependency>
<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-spring</artifactId>
    <version>1.2.3</version>
</dependency>
<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-ehcache</artifactId>
    <version>1.2.3</version>
</dependency>
<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-cas</artifactId>
    <version>1.2.3</version>
</dependency>

 

 

2.web.xml

 

<filter>
    <filter-name>CAS Validation Filter</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    <init-param>
        <param-name>targetBeanName</param-name>
        <param-value>shiroFilter</param-value>
    </init-param>
    <!-- targetFilterLifecycle设为true是将filter放入web容器中成为真正意义上的filter。
         否则只是个代理filter,不具有filter的生命周期,因此无法执行filter的init、destroy方法 -->
    <init-param>
        <param-name>targetFilterLifecycle</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>

 

 

3.shiro的Spring配置文件

1.主要是配置了casFilter 和 DefaultWebSecurityManager的subjectFactory参数;

2.casFilter 中 failureUrl 参数对应的地址 cas-failure需要自己实现,当登录认证失败的时候,会访问这个地址,可以通过该地址将该请求指向一个错误页面;LoginController中实现

3.注意Bean ShiroFilterFactoryBean属性loginUrl的值是 cas服务器地址,并将当前项目登录地址(注意那个/login)作为参数传入进去的。这里 /login和下面filterChainDefinitions中/login = cas保持一直;

 

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
       http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd">
    <!-- 读取配置文件 -->
    <context:property-placeholder location="classpath*:cas.properties" ignore-unresolvable="true"/>

    <bean name="singleSignOutFilter" class="org.jasig.cas.client.session.SingleSignOutFilter"/>

    <bean name="assertionThreadLocalFilter" class="org.jasig.cas.client.util.AssertionThreadLocalFilter"/>

    <bean id="casFilter" class="org.apache.shiro.cas.CasFilter">
        <!-- cas-failure 通过SpringMVC 跳转JSP -->
        <property name="failureUrl" value="cas-failure"/>
    </bean>

    <!-- Shiro's main business-tier object for web-enabled applications -->
    <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
        <property name="realm" ref="shiroCasRealm"/>
        <property name="cacheManager" ref="shiroEhcacheManager"/>
        <property name="subjectFactory" ref="casSubjectFactory"/>
    </bean>

    <!-- 項目自定义的Realm -->
    <bean id="shiroCasRealm" class="com.gqshao.cas.realm.MyCasRealm">
        <property name="casServerUrlPrefix" value="https://sso.gqshao.com:8443/cas-server"/>
        <property name="casService" value="http://sso.gqshao.com:8090/client/login"/>
    </bean>

    <bean id="casSubjectFactory" class="org.apache.shiro.cas.CasSubjectFactory"/>

    <!-- Shiro Filter -->
    <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
        <property name="securityManager" ref="securityManager"/>
        <!-- 用于调用Controller -->
        <property name="loginUrl"
                  value="https://sso.gqshao.com:8443/cas-server/login?service=http://sso.gqshao.com:8090/client/login"/>
        <property name="successUrl" value="/"/>
        <!-- 自己实现的formAuthcFilter,加入key type -->
        <property name="filters">
            <util:map>
                <entry key="cas" value-ref="casFilter"/>
            </util:map>
        </property>
        <property name="filterChainDefinitions">
            <value>
                /login = cas
                /logout = logout
                /static/** = anon
                /cas-failure = anon
                /** = user
            </value>
        </property>
    </bean>

    <!-- 用户授权信息Cache, 采用EhCache -->
    <bean id="shiroEhcacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">
        <property name="cacheManagerConfigFile" value="classpath:security/ehcache-shiro.xml"/>
    </bean>

    <!-- 保证实现了Shiro内部lifecycle函数的bean执行 -->
    <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>

    <!-- AOP式方法级权限检查 -->
    <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"
          depends-on="lifecycleBeanPostProcessor">
        <property name="proxyTargetClass" value="true"/>
    </bean>
    <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
        <property name="securityManager" ref="securityManager"/>
    </bean>
</beans>

 

 

 4.LoginController

1.failure方法是登录失败指定跳转到某条失败页面中

2.logoutUrl用于返回登出地址,实际的地址应该为https://sso.gqshao.com/adp-cas/logout?service=http://sso.gqshao.com:8080/adp-web/logout,/logout配置在shiro配置文件中filterChainDefinitions下ShiroFilterFactoryBean中

 

@Controller
public class LoginController {

    @Value("${client.logoutUrl}")
    public String logoutUrl;

    @RequestMapping("/cas-failure")
    public String failure() {
        return "error/casFailure";
    }

    @RequestMapping("/logout-url")
    @ResponseBody
    public String logoutUrl() {
        return logoutUrl;
    }
}

 

5.Shiro的Realm实现

继承CasRealm

 

public class MyCasRealm extends CasRealm {


    /**
     * 认证回调函数,登录时调用.
     */
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken) {
        return super.doGetAuthenticationInfo(authcToken);
    }

    /**
     * 授权查询回调函数, 进行鉴权但缓存中无用户的授权信息时调用.
     */
    @Override
    @SuppressWarnings("unchecked")
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
        List<Object> listPrincipals = principals.asList();
        String name = listPrincipals.get(0).toString();
        Map<String, String> attributes = (Map<String, String>) listPrincipals.get(1);
        SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();
        Set<String> roles = Sets.newHashSet("admin","operator");
        authorizationInfo.setRoles(roles);
        Set<String> permissions = Sets.newHashSet("show-info");
        authorizationInfo.setStringPermissions(permissions);
        return authorizationInfo;
    }
}

 

 

6.注意

1.通过shiro-cas整合后AssertionHolder不可用

2.实际部署在tomcat时,Windows环境下catalina.bat文件中需要添加set JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=UTF-8;Linux环境中catalina.sh文件中配置JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8"

 

 

 

 

 

 

 

 

 

 

 

 

0
0
分享到:
评论

相关推荐

    Shiro和cas部分整合

    首先,`context-param` 部分指定了CAS客户端与Shiro的配置文件路径,这里设置为 `classpath*:/cas-client-shiro.xml`。这个配置文件将包含关于CAS服务器的URL、服务验证URL等信息,以及Shiro的 Realm 设置,用于定义...

    cas结合 springmvc shiro 单点登录

    本项目是关于如何将CAS(Central Authentication Service)与SpringMVC和Shiro结合实现SSO的实践示例。 首先,我们来了解一下三个主要组件: 1. **CAS**: CAS是一个开源的身份验证框架,主要用于处理用户身份验证...

    SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录

    SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 ...

    基于springboot,cas5.3,shiro,pac4j,rest接口获取ticket不再跳转cas server登录页

    1. 配置Spring Boot:首先,我们需要在Spring Boot应用中引入必要的依赖,如CasClient、Shiro和Pac4J的相关依赖。然后,在配置文件中设置CAS服务器的URL和其他相关参数。 2. 集成CAS和Pac4J:在Spring Boot应用中,...

    Cas客户端shiro配置

    1.如果客户端项目采用shiro控制权限 则需要将cas-client 认证过滤交给shiro来管理 2.从shiro下载相应版本的shiro-cas-xxxx. Jar或者在maven里直接添加

    cas +shiro集成

    CAS(Central Authentication Service)和Apache Shiro都是在Java领域中广泛使用的安全框架,它们各自有着不同的侧重点。CAS主要用于集中式身份验证,而Shiro则更专注于应用内部的安全管理,如授权、会话管理和安全...

    shiro整合cas3.5

    在本文中,我们将讨论如何将 Apache Shiro 与 CAS 3.5 版本进行整合,以实现统一的登录认证。 整合 Shiro 和 CAS 的主要目标是利用 CAS 的身份验证服务,避免在每个应用中重复实现登录逻辑。以下是一个简化的整合...

    SSM整合shiro实现角色权限

    SSM整合Shiro实现角色权限是一项常见的Web应用安全实践,主要目的是为了实现用户登录认证、权限控制以及会话管理等功能。SSM框架是由Spring、Spring MVC和MyBatis三个组件组成的,而Apache Shiro则是一个强大且易用...

    springboot+cas5.x+shiro+pac4j实现sso集成

    项目中提供的`shiro-cas-pac4j`可能包含Shiro的配置文件、CasClient的配置及相关的过滤器设置,而`cas`文件可能包含了CAS服务器的相关配置和部署脚本。通过研究这些文件,可以深入理解SSO集成的细节。 总结来说,这...

    Spring MVC整合shiro

    **Spring MVC 整合 Shiro 知识点详解** Spring MVC 是一款强大的MVC框架,用于构建企业级的Web应用程序,而Apache Shiro则是一款安全框架,负责处理身份验证、授权(权限控制)、会话管理和安全性相关的其他功能。...

    springboot整合shiro

    **SpringBoot整合Shiro**是将流行的Java Web框架Spring Boot与安全管理框架Apache Shiro结合,以构建高效、安全的Web应用程序。Spring Boot以其简洁的配置和快速的开发体验深受开发者喜爱,而Shiro则提供了全面的...

    SpringBoot2整合shiro

    **SpringBoot2整合Shiro详解** 在现代Java Web开发中,SpringBoot以其便捷的配置、快速的启动和强大的集成能力,成为了许多开发者的首选框架。而Shiro则是一款轻量级的安全框架,提供了身份验证、授权、会话管理和...

    springboot-casclient.rar

    本项目"springboot-casclient"旨在展示如何将SpringBoot与CAS相结合,实现单点登录,并结合Thymeleaf模板引擎和Shiro权限管理,构建一个完整的安全认证与授权解决方案。 首先,我们来深入理解SpringBoot集成CAS的...

    SSH整合Shiro源码

    **SSH整合Shiro源码详解** 在Web应用开发中,安全性是至关重要的。SSH(Spring、Struts2、Hibernate)和Apache Shiro都是常见的Java安全框架。SSH是用于构建MVC架构的开源框架,而Shiro则专注于身份验证、授权和...

    springboot+cas5.2.3+shiro+pac4j实现sso集成2

    3. 配置Shiro:在Shiro的配置中,我们需要设置CasClient,让它与Pac4j协同工作,处理Ticket验证。同时,定义角色和权限规则。 4. 客户端配置:在每个需要SSO的服务应用中,也需要配置Pac4j,以识别和处理来自CAS的...

    shiro整合cas的实例

    本实例主要探讨如何将 Apache Shiro 与 CAS 整合,实现一个统一的身份验证系统。下面将详细介绍整合过程中的关键步骤和涉及的知识点。 1. **安装和配置 CAS 服务器** - 首先,你需要下载并部署 CAS 服务器。CAS ...

    springmvc+spring+shiro+cas单点登录实例

    spring+springmvc+shiro+cas单点登录实例 springmvc+spring+shiro+cas单点登录实例 加入了登录验证码认证,修改了下首页样式,不过样式没有弄好,很丑的,有空自己再弄下 说明:cas-server是单点登录服务端,用的是...

    jfinal整合shiro实例

    完整的jFinal整合Shiro实例,部署就可使用!!! 1、Eclipse直接导入,部署到tomcat中 2、新建jfinal_shiro数据库,执行jfinal_shiro.sql 3、修改配置文件中数据库用户名和密码 ~/jfinal_shiro/resource/jfinal....

    Spring框架中整合Shiro

    本文将详细介绍如何在Spring框架中整合Shiro,实现身份识别(authc)和鉴权管理功能。 首先,我们需要引入Shiro的相关依赖。在Maven项目中,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org.apache....

    springboot2.0整合Shiro

    SpringBoot 2.0 整合 Apache Shiro 是一个常见的安全框架集成,它为Web应用程序提供了用户认证和授权的功能。SpringBoot的优雅简洁与Shiro的强大安全特性相结合,可以简化开发过程,使得权限管理变得更加高效和便捷...

Global site tag (gtag.js) - Google Analytics