Shiro授权详细解析

来源:互联网 发布:淘宝虚拟现实vr购物 编辑:程序博客网 时间:2024/06/04 19:54
                                            Shiro授权Shiro支持三种方式的授权:    1.编程式:通过编写if/else授权代码块的方式完成(不推荐)    2.注解式:通过在controller方法上面注解完成(用的较多)    3.JSP标签:在页面上面完成(可以隐藏无权限的东西)Shiro授权过程:    1. 授权需要继承 AuthorizingRealm , 并实现其 doGetAuthorizationInfo 方法    2. AuthorizingRealm 类继承自 AuthenticatingRealm, 但没有实现 AuthenticatingRealm 中的    doGetAuthenticationInfo, 所以认证和授权只需要继承 AuthorizingRealm 就可以了. 同时实现他的两个抽象方法.Shiro权限注解:    @RequiresAuthentication:表示当前的subject已经通过login进行了身份验证,即subject.isAuthenticated()返回true    @RequiresUser:表示当前subject已经通过身份验证或者通过记住我登录的    @RequiresGuest:表示游客身份    @RequiresRoles(value="admin","user",logical=Logical.AND):表示当前subject需要adminuser两个角色    @RequiresPermissions(value="user:a","user:b",logical=Logical.OR):表示当前subject需要权限a或者b可以通过实例工厂的方式注入权限资源,实现数据库配置                                                Shiro会话【重点】      Controller里面的httpSession一般情况下我们不允许其他层能访问到      但是有了shiroshiro支持在任何地方获得session,这是一个很重要的应用Shiro会话验证   Shiro提供会话验证调度器SessionDAO      实现对session的增删改查(放入数据库)        create table sessions(            id varchar(200);            session varchar(2000);            constraint pk_sessions primary key(id);        )charset=utf8 engine=InnoDB      继承EnterpriseCacheSessionDAO        protected Serializable doCreate(Session session) {                Serializable sessionId = generateSessionId(session);                assignSessionId(session, sessionId);                return sessionId;            }        protected Session doReadSession(Serializable sessionId) {return null;}        protected void doUpdate(Session session) {}        protected void doDelete(Session session) {}      写和读session时候需要对Session进行序列化和反序列化操作(因为存入数据库的session是个对象,而不是字段)      做法:            利用对象输入输出流进行读写,而对象输入输出流需要包装字节输入输出流
原创粉丝点击