博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Shiro] - Shiro之进阶
阅读量:6327 次
发布时间:2019-06-22

本文共 5754 字,大约阅读时间需要 19 分钟。

上一个知识点ssm, 哪里需要权限,哪里写注解@RequirePermission就行. 但是,真正项目开发的时候, 这种方式就很有局限性了,

当权限配置关系发生变化, 每次都要修改代码, 编译打包重启系统, 这肯定是不能够被接受的.

最好的方式,是通过动态配置,哪个给不同的用户配置不同的角色,权限,修改之后立马生效这种方式. 为了实现这个效果, 就需要基于URL配置的方式来做了.

接下来要做基于URL配置权限的讲解. 但是基于URL配置权限需要自己能够进行权限信息的灵活配置, 那么就需要对权限信息一套进行维护.

而权限一套本身的维护就很复杂,为了学习的平滑,本知识仅仅对权限一套信息的维护,进行开发, 以此为后续的基于URL配置权限做准备.

 applicationContext-shiro.xml

这个xml文件配置了shiro过滤器工厂类 会话ID生成器 会话DAO 会话管理器 等等

/login=anon /index=anon /static/**=anon
/config/**=anon /doLogout=logout
/** = authc

这些bean说明Spring的ioc容器要自动注入这个bean实例

虽然还不太清除会话ID和会话Cookie的具体实现,也许是当客户端和服务器进行一次交互时.

ApplicationContext.xml配置文件
Spring配置文件是用于指导Spring工厂进行Bean生产、依赖关系注入(装配)及Bean实例分发的“图纸”。Java EE程序员必须学会并灵活应用这份“图纸”准确地表达自己的“生产意图”。Spring配置文件是一个或多个标准的XML文档,ApplicationContext.xml是Spring的默认配置文件,当容器启动时找不到指定的配置文档时,将会尝试加载这个默认的配置文件。
 
springMVC.xml
这个是启用mvc的注解的作用 下面还有启用shiro注解的bean 下面这个是包扫描

demo中使用了log4j打印日志

# Global logging configurationlog4j.rootLogger=ERROR, stdout# MyBatis logging configuration...log4j.logger.com.how2java=TRACE# Console output...log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

 

这个是之前的spring-mvc.xml

可以看到<mvc:annotation-driven />是注解驱动

 

 可以看到基础的Java类,以及老式的写法我这里还是比较多的

当时设计这个图书馆系统运用的Java面向对象的思想,比如书,书在书架上,每个书架都有分类,一个图书馆里有很多书架.

当然也可以把图书管理员设想成一个service

在booksstuff包中,有Books和BookShelf类

package com.ykmimi.booksstuff;import java.math.BigDecimal;/** * 放书的那一类 *  * @author SeeClanUkyo * */public class Books {    / *? 书是人类进步的阶梯?*/    BigDecimal bookID = null;    public String bookName;    String authorName;    String bookConcernName;    public Integer beBorrowed = null;    String categoryName;    double price;    // int amountOfAllLibraryBooks;// 图书馆藏书量总量    // int amountOfOneCategoryBooks;// 某种类书的总量    // int amountOfOneNameBooks;// 某名字的书的总量    // int issueYear;    public Integer getBeBorrowed() {        return beBorrowed;    }    public BigDecimal getBookID() {        return bookID;    }    public void setBookID(BigDecimal bookID) {        this.bookID = bookID;    }    public String getBookName() {        return bookName;    }    public void setBookName(String bookName) {        this.bookName = bookName;    }    public String getAuthorName() {        return authorName;    }    public void setAuthorName(String authorName) {        this.authorName = authorName;    }    public String getBookConcernName() {        return bookConcernName;    }    public void setBookConcernName(String bookConcernName) {        this.bookConcernName = bookConcernName;    }    public String getCategoryName() {        return categoryName;    }    public void setCategoryName(String categoryName) {        this.categoryName = categoryName;    }    public double getPrice() {        return price;    }    public void setPrice(double price) {        this.price = price;    }    public void setBeBorrowed(Integer beBorrowed) {        this.beBorrowed = beBorrowed;    }    public Books(BigDecimal bookID, String bookName, String authorName, String bookConcernName, int beBorrowed,            String categoryName, double price) {        this.bookID = bookID;        this.bookName = bookName;        this.authorName = authorName;        this.bookConcernName = bookConcernName;        this.beBorrowed = beBorrowed;        this.categoryName = categoryName;        this.price = price;    }    public String toString() {        String borrowedInfo = "";        if (beBorrowed == 0) {            borrowedInfo = "未借阅";        } else {            borrowedInfo = "已借阅";        }        return "图书编号:" + bookID + "\n" + "书名:" + bookName + "\n" + "类别:" + categoryName + "\n" + "作者:" + authorName                + "\n" + "出版社:" + bookConcernName + "\n" + "价格:" + price + "\n" + borrowedInfo + "\n";    }}

 

 

那么怎样去建立一个物流信息平台?

shiro在物流平台中起什么角色?

整个平台除了Java作为整个后端与数据库交互的语言外,让客户操作的,让客服操作的,财务操作的,以及管理员,以及程序维护者操作的地方,需要进行shiro权限分级.

(最后在下面的jsp中使用ajax进行controller层的调用执行增删改查即可,同样在调用的路径中使用shiro判定是否有此权限)

(更简单的理解是当判定zhang3有deleteProduct路径的权限时,才可以进入执行deleteProduct的delete数据库操作)

 

 

 

 

转载于:https://www.cnblogs.com/ukzq/p/10231472.html

你可能感兴趣的文章
八皇后问题
查看>>
.NET破解之爱奇迪(二)
查看>>
C#反射方法学习
查看>>
MD5加密解密
查看>>
.Net 转战 Android 4.4 日常笔记(6)--Android Studio DDMS用法
查看>>
SVN被锁定的几种解决方法
查看>>
js如何判断是否在iframe中及防止网页被别站用 iframe嵌套 (Load denied by X-Frame-Options)...
查看>>
ios ios7 取消控制拉升
查看>>
182在屏幕中实现网格化视图效果
查看>>
本文摘录 - FlumeJava
查看>>
Scala学习(三)----数组相关操作
查看>>
Matlab基于学习------------------函数微分学
查看>>
UVa 11790 - Murcia&#39;s Skyline
查看>>
启动时创建线程并传递数据
查看>>
汉字正字表达式解决方案
查看>>
lemon OA 下阶段工作安排
查看>>
WCF X.509验证
查看>>
Fatal error: Class 'GearmanClient' not found解决方法
查看>>
jsoup分解HTML DOM
查看>>
Axure RP介绍
查看>>