概念或其它内容可以参考我一系列的博客相关文章 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"
相关推荐
首先,`context-param` 部分指定了CAS客户端与Shiro的配置文件路径,这里设置为 `classpath*:/cas-client-shiro.xml`。这个配置文件将包含关于CAS服务器的URL、服务验证URL等信息,以及Shiro的 Realm 设置,用于定义...
本项目是关于如何将CAS(Central Authentication Service)与SpringMVC和Shiro结合实现SSO的实践示例。 首先,我们来了解一下三个主要组件: 1. **CAS**: CAS是一个开源的身份验证框架,主要用于处理用户身份验证...
SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 ...
项目中提供的`shiro-cas-pac4j`可能包含Shiro的配置文件、CasClient的配置及相关的过滤器设置,而`cas`文件可能包含了CAS服务器的相关配置和部署脚本。通过研究这些文件,可以深入理解SSO集成的细节。 总结来说,这...
1. 配置Spring Boot:首先,我们需要在Spring Boot应用中引入必要的依赖,如CasClient、Shiro和Pac4J的相关依赖。然后,在配置文件中设置CAS服务器的URL和其他相关参数。 2. 集成CAS和Pac4J:在Spring Boot应用中,...
1.如果客户端项目采用shiro控制权限 则需要将cas-client 认证过滤交给shiro来管理 2.从shiro下载相应版本的shiro-cas-xxxx. Jar或者在maven里直接添加
CAS(Central Authentication Service)和Apache Shiro都是在Java领域中广泛使用的安全框架,它们各自有着不同的侧重点。CAS主要用于集中式身份验证,而Shiro则更专注于应用内部的安全管理,如授权、会话管理和安全...
在本文中,我们将讨论如何将 Apache Shiro 与 CAS 3.5 版本进行整合,以实现统一的登录认证。 整合 Shiro 和 CAS 的主要目标是利用 CAS 的身份验证服务,避免在每个应用中重复实现登录逻辑。以下是一个简化的整合...
3. 配置Shiro:在Shiro的配置中,我们需要设置CasClient,让它与Pac4j协同工作,处理Ticket验证。同时,定义角色和权限规则。 4. 客户端配置:在每个需要SSO的服务应用中,也需要配置Pac4j,以识别和处理来自CAS的...
SSM整合Shiro实现角色权限是一项常见的Web应用安全实践,主要目的是为了实现用户登录认证、权限控制以及会话管理等功能。SSM框架是由Spring、Spring MVC和MyBatis三个组件组成的,而Apache Shiro则是一个强大且易用...
**Spring MVC 整合 Shiro 知识点详解** Spring MVC 是一款强大的MVC框架,用于构建企业级的Web应用程序,而Apache Shiro则是一款安全框架,负责处理身份验证、授权(权限控制)、会话管理和安全性相关的其他功能。...
**SpringBoot整合Shiro**是将流行的Java Web框架Spring Boot与安全管理框架Apache Shiro结合,以构建高效、安全的Web应用程序。Spring Boot以其简洁的配置和快速的开发体验深受开发者喜爱,而Shiro则提供了全面的...
**SpringBoot2整合Shiro详解** 在现代Java Web开发中,SpringBoot以其便捷的配置、快速的启动和强大的集成能力,成为了许多开发者的首选框架。而Shiro则是一款轻量级的安全框架,提供了身份验证、授权、会话管理和...
本项目"springboot-casclient"旨在展示如何将SpringBoot与CAS相结合,实现单点登录,并结合Thymeleaf模板引擎和Shiro权限管理,构建一个完整的安全认证与授权解决方案。 首先,我们来深入理解SpringBoot集成CAS的...
**SSH整合Shiro源码详解** 在Web应用开发中,安全性是至关重要的。SSH(Spring、Struts2、Hibernate)和Apache Shiro都是常见的Java安全框架。SSH是用于构建MVC架构的开源框架,而Shiro则专注于身份验证、授权和...
本实例主要探讨如何将 Apache Shiro 与 CAS 整合,实现一个统一的身份验证系统。下面将详细介绍整合过程中的关键步骤和涉及的知识点。 1. **安装和配置 CAS 服务器** - 首先,你需要下载并部署 CAS 服务器。CAS ...
spring+springmvc+shiro+cas单点登录实例 springmvc+spring+shiro+cas单点登录实例 加入了登录验证码认证,修改了下首页样式,不过样式没有弄好,很丑的,有空自己再弄下 说明:cas-server是单点登录服务端,用的是...
完整的jFinal整合Shiro实例,部署就可使用!!! 1、Eclipse直接导入,部署到tomcat中 2、新建jfinal_shiro数据库,执行jfinal_shiro.sql 3、修改配置文件中数据库用户名和密码 ~/jfinal_shiro/resource/jfinal....
本文将详细介绍如何在Spring框架中整合Shiro,实现身份识别(authc)和鉴权管理功能。 首先,我们需要引入Shiro的相关依赖。在Maven项目中,可以在pom.xml文件中添加以下依赖: ```xml <groupId>org.apache....
SpringBoot 2.0 整合 Apache Shiro 是一个常见的安全框架集成,它为Web应用程序提供了用户认证和授权的功能。SpringBoot的优雅简洁与Shiro的强大安全特性相结合,可以简化开发过程,使得权限管理变得更加高效和便捷...