- 浏览: 96658 次
- 性别:
- 来自: 临沂
文章分类
- 全部博客 (125)
- spring (2)
- java (6)
- jquery (0)
- android (0)
- window (1)
- 数据库 (0)
- 项目管理 (1)
- maven (0)
- english (0)
- ext (0)
- javascript and html (2)
- hibernate (1)
- p6spy (0)
- shiro (0)
- fusionchart (0)
- FileUtils (0)
- struts2 (0)
- ireport (0)
- webservice (0)
- stripes (0)
- jsp (1)
- it综合 (1)
- linux (1)
- 工作流 (0)
- activiti (0)
- poi (0)
- nosql (0)
- mongodb (0)
- lucene (0)
- nodejs (10)
- eclipse (2)
- objective-c (1)
最新评论
应用Shiro到Web Application(基础)
一、简介
如果你正想学习权限方面的知识,或者正打算把Shiro作为权限组件集成到自己的web application中,或许正在为Shiro如何实现CAPTCHA(验证码)功能而伤透脑筋。那么,本文正是为你准备的。本文简单介绍权限方面的基础知识并以实际例子,带你进入Shiro的世界。
二、权限基础
a)<wbr><wbr><wbr> 认证(你是谁?)<br>
判断你(被认证者)是谁的过程。通常被认证者提供用户名和密码。<br><br>
常见的认证包含如下几种<br>
匿名认证:允许访问资源,不做任何类型的安全检查。<br>
表单认证:访问资源之前,需要提交包含用户名和密码的表单。这是web application最常用的认证方式。这个过程一般会接合Session,只在第一次(新会话)访问资源时提交认证表单。<br>
基本HTTP认证:基于RFC 2617的一种认证方式。<br>
用户认证:Filter that allows access to resources if the accessor is a known user, which is defined as having a known principal. This means that any user who is authenticated or remembered via a 'remember me' feature will be allowed access from this filter.<br><br>
b)<wbr><wbr><wbr> 授权(你可以做什么?)<br>
判断被认证者(你)是否能做什么操作的过程。<br>
端口授权:必须通过指定的某个端口才能访问资源。<br>
Permission授权:Filter that allows access if the current user has the permissions specified by the mapped value, or denies access if the user does not have all of the permissions specified.<br>
Role授权:Filter that allows access if the current user has the roles specified by the mapped value, or denies access if the user does not have all of the roles specified.<br><br>
perms <wbr><wbr><wbr> org.apache.shiro.web.filter.authz.PermissionsAuthorization<wbr>Filter<br>
port <wbr><wbr><wbr> org.apache.shiro.web.filter.authz.PortFilter<br>
roles <wbr><wbr><wbr> org.apache.shiro.web.filter.authz.RolesAuthorizationFilter<wbr><br>
ssl <wbr><wbr><wbr> org.apache.shiro.web.filter.authz.SslFilter<br><br>
c)<wbr><wbr><wbr> 加密<br>
使用技术手段(如:MD5、SHA等)把待加密的数据变为密文(如:信息摘要等)过程。<br><br>
d)<wbr><wbr><wbr> RBAC<br>
基于角色的访问控制(Role-Based Access Control)。<br>
e)<wbr><wbr><wbr> Realm<br>
data access object for an application’s security components (users,roles, permissions)<br><br>
f)<wbr><wbr><wbr> Permission<br>
最小粒度的授权,不与用户关联。<br>
例如:导出报表、查看id号为“PO20090008”的采购单、创建FAQ。<br>
g)<wbr><wbr><wbr> Role<br>
Permission的集合。<br></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
三、Shiro特点
简单
功能强大
能独立运行,不依赖其它框架或容器
包含了认证、授权、Session管理、加密
易于扩展
四、web application 集成Shiro
接下来,按照如下步骤开始我们的Shiro之旅:
a)<wbr><wbr><wbr> 数据模型<br><br><a href="http://photo.blog.sina.com.cn/showpic.html#blogid=76a8f8780100r2c9&url=http://s2.sinaimg.cn/orignal/76a8f878g76cb0669a9a1" target="_blank"><img title="应用Shiro到Web<wbr>Application(基础)" name="image_operate_66181306143586290" alt="应用Shiro到Web<wbr>Application(基础)" src="http://s2.sinaimg.cn/middle/76a8f878g76cb0669a9a1&690" width="664" height="140"></a><br><br><br>
用户账号Account,可以简单的理解为用户。<br>
一个账号可以拥有多个角色(Role)。<br>
一个角色包含了多个权限(Permission)。<br><wbr><br><br>
b)<wbr><wbr><wbr> 创建工程,新建实体,添加与Shiro相关的Jar包<br>
如果你正在全用Eclipse:<br>
File--New--Other--Web--Dynamic Web Project<br><br>
在 /WEB-INFO/lib/目录下添加如下Jar包<br><br><a href="http://photo.blog.sina.com.cn/showpic.html#blogid=76a8f8780100r2c9&url=http://s4.sinaimg.cn/orignal/76a8f878ga3ee4322ebc3" target="_blank"></a><img src="http://hi.csdn.net/attachment/201109/30/3638307_1317353580bBf2.jpg" alt=""><br><br><br><wbr><br>
相关Jar包,你可以在http://incubator.apache.org/shiro/download.html<br>
c)<wbr><wbr><wbr> 配置web.xml,添加过滤器<br></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr> <filter></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> <filter-name>ShiroFilter</filter-name></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> <filter-class>org.apache.shiro.web.servlet.IniShiroFilter</filter-class></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr> </filter></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr> <filter-mapping></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> <filter-name>ShiroFilter</filter-name></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> <url-pattern> / *</url-pattern></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
</filter-mapping>
d)<wbr><wbr><wbr> INI配置<br> [main]<br> #SHA256加密<br> sha256Matcher = org.apache.shiro.authc.credential.Sha256CredentialsMatcher<wbr><br><br> #realm<br> myRealm = com.wearereading.example.shiro.MyShiroRealm<br> myRealm.credentialsMatcher = $sha256Matcher<br><br> #缓存<br> myRealm.authorizationCachingEnab<wbr>led = true<br> cache=org.apache.shiro.cache.ehcache.EhCacheManager<br> myRealm.cacheManager=$cache<br><br> [filters]<br> shiro.loginUrl = /login.jsp<br> #authc=org.apache.shiro.web.filter.authc.FormAuthenticationFilter<wbr><br> authc.successUrl =/background.jsp<br> perms.unauthorizedUrl =/401.jsp<br><br> [urls]<br> /login.jsp=authc<br> /logout.jsp=anon<br> /about.jsp=anon<br> /background.jsp=authc<br><br> /faq/test.jsp=authc<br> /faq/list.jsp=authc,perms["faq:list"]<br> /faq/view.jsp=authc,perms["faq:view"]<br><br> 位置:<br> 配置参数可以写在web.xml文件中,也可以单独文件形式存放在本地类根路径、文件系统以及网络环境中。<br> Shiro INI Inline Config 和External Config<br><br> public class MyShiroRealm extends AuthorizingRealm{<br><br><wbr><wbr><wbr><br><wbr><wbr><wbr> protected AuthorizationInfo doGetAuthorizationInfo(<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> PrincipalCollection principals) {<br><wbr><wbr><wbr><wbr><wbr><wbr> String username = (String) principals.fromRealm(<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> getName()).iterator().next();<br><wbr><wbr><wbr><wbr><wbr><wbr><br><wbr><wbr><wbr><wbr><wbr><wbr> if( username != null ){<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> AccountManager accountManager = new AccountManagerImpl();<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> Collection<Role> myRoles = accountManager.getRoles( username );<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> if( myRoles != null ){<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> for( Role each:myRoles ){<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> info.addRole(each.getName());<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> info.addStringPermissions( each.getPermissionsAsString() );<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> }<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> return info;<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> }<br><wbr><wbr><wbr><wbr><wbr><wbr> }<br><wbr><wbr><wbr><wbr><wbr><wbr><br><wbr><wbr><wbr><wbr><wbr><wbr> return null;<br><wbr><wbr><wbr> }<br><br><wbr><wbr><wbr><br><wbr><wbr><wbr> protected AuthenticationInfo doGetAuthenticationInfo(<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> AuthenticationToken authcToken ) throws AuthenticationException {<br><wbr><wbr><wbr><wbr><wbr><wbr> UsernamePasswordToken token = (UsernamePasswordToken) authcToken;<br><wbr><wbr><wbr><wbr><wbr><wbr> String accountName = token.getUsername();<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><br><wbr><wbr><wbr><wbr><wbr><wbr> //用户名密码验证<br><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
相关推荐
Shiro可以很容易地集成到各种应用中,包括Java Web应用。 现在,我们将这两个框架结合,构建一个单Web项目的权限案例: 1. **项目初始化**:首先,创建一个SpringBoot项目,选择Spring Web依赖。然后,通过Maven或...
本项目"shiro-demo_DEMO_shiro_shriodemo"是一个基于 Shiro 实现的前后端分离的演示示例,旨在帮助开发者快速理解和应用 Shiro 在实际项目中的功能。 **1. Shiro 框架基础** Shiro 提供了以下核心组件: - **...
Shiro不仅适用于命令行应用程序、移动应用程序,而且适用于大型的Web和企业级应用程序。此外,Shiro还支持Web应用安全、单元测试以及多线程支持等辅助功能,这些辅助功能主要是为了加强这四个主要关注点。 Shiro...
而FreeMarker和Shiro则分别是常用的模板引擎和安全框架,它们能帮助我们构建出功能强大且安全的Web应用。本文将详细讲解如何在SpringBoot项目中整合这两者。 **一、FreeMarker简介** FreeMarker是一个基于模板的...
**Shiro的Web应用场景** 1. **登录功能**:用户提交用户名和密码后,Shiro会调用 Realm 的 `doGetAuthenticationInfo` 方法进行身份验证。 2. **权限控制**:通过 `@RequiresPermissions` 和 `@RequiresRoles` 注解...
SpringBoot的依赖则包含`spring-boot-starter-web`,它是SpringBoot Web应用的基础。 接下来,我们需要配置Shiro。这通常涉及创建一个自定义的`SecurityManager`实例,并在SpringBoot的配置类中注册它。Shiro的配置...
3. **编写Shiro配置**:创建一个Shiro配置类,配置Realm(权限认证),并设置SessionManager使用RedisSessionDAO,以便将Session数据保存到Redis中。 4. **自定义Realm**:根据实际业务需求,实现自定义的...
【SpringBoot整合Shiro详解】 在现代Web应用开发中,SpringBoot因其简洁的配置和强大的功能集成,成为了Java开发者首选的...总的来说,SpringBoot与Shiro的结合,为我们的Web应用提供了一套高效、便捷的安全解决方案。
Shiro 不仅适用于 Web 应用,也适用于传统的命令行或桌面应用程序。它的核心概念包括 Subject(当前操作主体)、Realms(数据源,用于获取认证和授权信息)和 SecurityManager(安全管理器,协调这些组件工作)。 ...
Shiro的过滤器机制使得在Web应用中实现权限控制变得简单,只需在配置中设置过滤规则即可。 具体到项目结构,可能包含以下几个关键部分: 1. `pom.xml`:Maven的项目对象模型文件,定义了项目依赖、版本和其他构建...
在 Shiro 应用的 web.xml 中,配置 CAS 的客户端过滤器,以便在用户访问受保护资源时重定向到 CAS 登录页面。 通过以上步骤,Shiro 就能够与 CAS 3.5 进行集成,实现统一的身份验证。用户在访问需要认证的资源时,...
本篇文章将深入探讨如何在Spring Boot项目中集成并使用Shiro,为你的Web应用构建稳固的安全防护。 一、Shiro简介 Apache Shiro是一个轻量级的安全管理框架,它主要处理身份验证(Authentication)、授权...
**标题:“shiroDemo.rar”** - 这个压缩包文件名为“shiroDemo”,暗示了它是一个关于Shiro框架的示例项目,可能包含了如何在Spring Boot应用中集成Shiro的相关代码和配置。 **描述:“springboot+shiro+jwt+redis...
在本项目 "shiro-springboot.zip" 中,我们将探讨如何将 Shiro 集成到 Spring Boot 应用中,实现基本的身份验证和权限控制。 首先,`pom.xml` 文件是 Maven 项目的配置文件,它包含了 Shiro 和 Spring Boot 相关...
3. **环境属性变更**:增加了新的配置属性,例如`spring.main.web-application-type`,用于明确应用是否为Web应用。 4. **WebFlux改进**:对响应式编程的支持更加完善,包括错误处理和Web测试。 5. **更好的日志管理...
当我们将SpringBoot2与Shiro整合时,可以构建出安全且易于管理的Web应用。本文将详细介绍如何在SpringBoot2项目中整合Shiro,并探讨相关的知识点。 ### 1. SpringBoot2基础知识 首先,我们需要了解SpringBoot的...
标题“shiro redis session共享”涉及的是Web应用中关于用户会话管理的技术,主要集中在Apache Shiro框架和Redis缓存系统上。Apache Shiro是一款强大的Java安全框架,它提供了身份验证、授权、加密和会话管理功能。...
我们可以通过Spring的@Autowired注解将Shiro的SecurityManager注入到Spring的配置类中,然后在启动时进行初始化。这样,Spring Boot的应用就能利用Shiro提供的强大安全功能。 在学习过程中,提供的《从零开始学...
**SpringBoot+MybatisPlus+Shiro整合**项目是一个基于Java技术栈的Web应用程序开发框架,主要用于构建高效、便捷的企业级应用。这个整合涉及到三个核心组件:Spring Boot、Mybatis Plus和Apache Shiro。 **Spring ...