Apache Shiro是一个强大易用的Java安全框架,提供了认证,授权,加密和会话管理等功能:
认证(认证):用户身份识别,常被称为用户“登录”,判断用户是否登陆,如果未登陆,则拦截其请求
授权(授权):访问控制当用户登陆后,判断其身份是否有权限访问相应的资源,如果没有权限则拦截。
密码加密(加密):保护或隐藏数据防止被偷窃将MD5进行二次封装,让其更加容易使用注意MD5不可逆运算
会话管理(会话管理)
四郎框架:四郎的三大核心组件:
主题:正与系统进行交互的人,或某一个第三方服务所有主题实例都被绑定到(且这是必须的)一个安全管理器上。
安全管理器:四郎架构的心脏,典型的门面模式。。用来协调内部各安全组件,管理内部组件实例,并通过它来提供安全管理的各种服务当四郎与一个主题进行交互时,实质上是幕后的安全管理器处理所有繁重的主题安全操作。
领域:。本质上是一个特定安全的DAO当配置四郎时,必须指定至少一个境界用来进行身份验证和/或授权.Shiro提供了多种可用的领域来获取安全相关的数据如关系数据库( JDBC),INI及属性文件等。可以定义自己的境界实现来代表自定义的数据源。
shiro :调用过程,应用程序调用Subject,Subject调用Shiro SecurityManager,Shiro SecurityManager是核心功能实现的部分,最后Shiro SecurityManager 在调用Realm。
四郎内置过滤器
匿名:是用户不用登录就能访问
authc:需要登录才能访问
烫发:授权
端口:端口的拦截
SSL:安全
具体项目实现:添加代理的过滤器
shiroFilter
org.springframework.web.filter.DelegatingFilterProxy
shiroFilter
*.action
*.html
*
四郎的核心配置文件:(applicationContext_shiro.xml)
/error.html = anon
/*.html = authc
自定义域(相当于是指路人)
我们改用subject.login方法后,并不会调用登陆的业务层进行登陆的验证查询,即不会从数据库查找登陆的用户名和密码是否正确,而是将这项工作交给四郎去完成。那四郎是怎么知道登陆的用户名和密码是否正确的呢?其实它也需要用到我的登陆验证业务,这时它就得向“别人”打听一下,那就是境界了。
真正实现登陆验证的是境界,而四郎只是去调境界
领域:Realm充当了Shiro与应用安全数据间的“桥梁”或者“连接器”。也就是说,当对用户执行认证(登录)和授权(访问控制)验证时,Shiro会从应用配置的Realm中查找用户及其权限信息。 从这个意义上讲,境界实质上是一个安全相关的DAO:它封装了数据源的连接细节,并在需要时将相关数据提供给四郎当配置四郎时,你必须至少指定一个域,用于认证和(或)授权。配置多个领域是可以的,但是至少需要一个。