Shiro入门:配置与注解模式详解

需积分: 12 3 下载量 34 浏览量 更新于2024-07-13 收藏 1.3MB PPT 举报
"配置Shiro注解模式,Shiro入门学习" Apache Shiro是一个全面的Java安全框架,它提供身份验证、授权、会话管理和加密等功能,适用于各种环境,包括Web应用。Shiro通过其简洁的API使得开发者能够轻松地实现安全性相关的功能。 在配置Shiro注解模式时,我们需要在Spring配置文件中添加两个关键的bean。首先,`DefaultAdvisorAutoProxyCreator` bean允许Spring创建代理以支持Shiro的注解。这个bean需要依赖`lifecycleBeanPostProcessor`,确保在适当的时间运行。接着,`AuthorizationAttributeSourceAdvisor` bean将Shiro的安全管理器(securityManager)与Spring的AOP框架结合,使得我们可以使用Shiro的注解进行权限控制。 在Spring MVC环境中,当使用Shiro注解模式时,如果用户登录失败或没有权限访问某个资源,Shiro会抛出异常。为了提供友好的用户体验,我们需要在Spring MVC的配置中处理这些异常,通常是通过定义异常处理器,将异常转换为用户可理解的错误信息,避免未经处理的异常直接显示在页面上。 Shiro的四个核心组件包括: 1. **身份验证 (Authentication)**:负责验证用户的身份,即“登录”过程。它处理用户名和密码的验证,并确认用户的身份。 2. **授权 (Authorization)**:授权是指确定用户是否有权限执行某个操作,比如检查用户是否具有“admin”角色,或者是否具有访问特定资源的权限。 3. **会话管理 (Session Management)**:Shiro提供了跨域的会话管理能力,即使在客户端(如CS程序)中也能使用会话来控制权限。 4. **加密 (Cryptography)**:Shiro封装了复杂的加密算法,简化了密码和其他敏感数据的加密过程。 此外,Shiro还支持多种扩展功能,如: - **Web Support**:为Web应用提供额外的便利功能。 - **Caching**:缓存管理可以提高应用性能。 - **Concurrency**:处理多线程环境下的安全性问题。 - **Testing**:提供测试工具和辅助类,方便集成测试。 - **RunAs**:允许用户临时切换身份,这对于某些管理操作非常有用。 - **Remember Me**:记住用户身份,便于实现类似购物车的持久化功能。 在Shiro中,`Subject` 是一个抽象概念,代表与系统进行交互的实体,可能是用户、服务或其他对象。每个`Subject` 都需要与一个`SecurityManager` 关联,通过`Subject` 进行的所有操作最终都会转发给对应的`SecurityManager` 进行实际处理。在实际开发中,我们主要与`Subject` 交互,而`SecurityManager` 则在幕后负责协调和管理安全相关的工作。
2015-10-28 上传
这是一个shiro的入门Demo.. 使用了Spring MVC,mybaits等技术.. 数据库设计 : User : name--password Role : id--userid--roleName Function : id--userid--url tinys普通用户只能访问index.jsp admin用户通过添加了admin的permission,所以可以访问admin.jsp role用户通过添加了role角色,所以可以访问role.jsp 这是最基本的shiro的运用..目的是让你快速了解shiro的机制.. 这个Demo体现shiro的地方主要在两个类以及shiro.xml的配置文件 CustomRealm : 处理了登录验证以及授权.. ShiroAction : 用来传递登录时的用户数据..转换为token传递给realm...之后根据结果做相应的逻辑处理.. shiro.xml : shiro的主要配置... 规则定义在以下地方 : <property name="filterChainDefinitions"> <value> /login.jsp* = anon /index.jsp* = authc /index.do* = authc /admin.jsp*=authc,perms[/admin] /role.jsp*=authc,roles[role] </value> </property> 2015-10-28更新 --通过添加了以下内容来使用注解方式配置权限.... <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="exceptionMappings"> <props> <prop key="org.apache.shiro.authz.UnauthorizedException">unauth</prop> <prop key="org.apache.shiro.authz.UnauthenticatedException">login</prop> </props> </property> </bean> <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" depends-on="lifecycleBeanPostProcessor" /> <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"> <property name="securityManager" ref="securityManager" /> </bean> --修改了过滤链 //简单的讲就是把需要特别处理的路径写到前面,越特殊写到越前 <property name="filterChainDefinitions"> <value> /shiro/login.do*=anon /login.jsp* = anon /admin.jsp*=authc,perms[/admin] /role.jsp*=authc,roles[role] /** = authc </value> </property>