1.Shiro的架构
Shiro官网架构图如下:
Shiro核心三部分是Subject, SecurityMnager, Realm.
(1) Subject:与当前软件交互的任何事物,可以是第三方服务;
(2) SecurityMnager:轻量级的容器组件;
(3) Realm:在shiro和安全数据之间充当桥梁或者连接器;
(4) SessionManager:创建管理用户的session生命周期;默认情况下shiro使用当前环境下的session机制(servlet或者EJB容器),若没有的话会使用shiro嵌入的企业级session管理机制;
(5) SessionDao:持久化当前session数据;
(6) Cachemanager:创建管理cache实例生命周期,
SecurityMnager包括:
(1) Authentication:验证
(2) Authorization:授权
(3) Session Management
(4) Cache Mangement
(5) Realm Coordination:realm调度
(6) Event Propagation:事件传播
(7) Remember Me Service
AuthenticationToken implements org.apache.shiro.auth.RememberMeAuthenticationToken{
boolean isRememberMe(){
return true;
}
}
或者使用UserNamePasswordToken,这个类已经实现上面的接口;返回true会记住当前token。
(8) Subject Creation
(9) Logout and more
SecurityMnager是一个兼容Javabeans的轻量级容器,它几乎将所有的行为委托给其他包装的组件。因此,通过Spring,Guice,JBOSS等为SecurityMnager配置自定义的组件是可行的。
下图是我理解的shiro运行流程:
2. Shiro配置
(1) [main]
Shiro配置中main部分主要配置filterchain,sessionManager等;filter可以是shiro自有的filter也可以是自定义的。
Shiro自有的filter有:
anon | org.apache.shiro.web.filter.authc.AnonymousFilter |
authc | org.apache.shiro.web.filter.authc.FormAuthenticationFilter |
authBasic | org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter |
logout | org.apache.shiro.web.filter.authc.LogoutFilter |
noSessionCreation | org.apache.shiro.web.filter.session.NoSessionCreationFilter |
perms | org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter |
port | org.apache.shiro.web.filter.authz.PortFilter |
rest | org.apache.shiro.web.filter.authz.HttpMethodPermissionFilter |
roles | org.apache.shiro.web.filter.authz.RolesAuthorizationFilter |
ssl | org.apache.shiro.web.filter.authz.SslFilter |
iser | org.apache.shiro.web.filter.authc.UserFilter |
(2) [urls]
urls配置url地址对应哪种filter, filter可以是shiro自有的也可以是main中配置的filter。等号左边是url模式,右边是filter。
例如: /index.html = anon