当前位置: 首页 > 编程日记 > 正文

jfinal整合shiro回顾

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

目前jfinal使用shiro进行身份验证和授权的后台实现已完成,现在我再来总结下学习过程及代码实现过程。最近半年多项目开发都用.net,但又不甘心用了一年多的java,jfinal就这样被废弃,所以就准备业余时间自己用jfinal搭个框架,做点什么,具体做什么,还没想好,先搭好框架再说。用jfinal实现增删改查很简单,从官网下个demo来改改就好了,但是要做个包括有身份验证及授权完善的系统,就要稍微花点功夫了。

一、做一些简单的jfinal的配置(如数据库配置,路由配置)后,要学习一下java比较流行且成熟的身份验证授权框架shiro,shiro这个东西乍眼一看觉得挺简单的,可深入去研究一下,发现他使用挺简单,但它的实现原理并没有那么简单,个人觉得学习shiro的过程,不只是学习它的使用,更多的是学习它的思想,它用的各种模式,我也说不上来,目前大概也就知道个单例模式和工厂模式,总之,就是高大上和不明觉厉。学习shiro还在路上,由此也激发了我想了解设计模式的欲望。下面再来总结下这两周学习的shiro吧,不梳理下把他放在脑子里过一久又当垃圾丢了,学了东西总要在脑子了刻下点什么东西,对不对?

二、shiro API理解

1、Shiro能帮我们完成认证、授权、加密、会话管理、与Web集成、缓存等功能。目前我主要学习了认证,授权和web继承。

2、Shiro的对外API主要有:Subject,SecurityManager,Realm,三者关系如下:

输入图片说明

(1)Subject(api核心):主体,代表当前用户,所有Subject都会被绑定到SecurityManager。

(2)SecurityManager(shiro核心):管理所有Subject,并且与Subjec的t所有交互,都是委托SecurityManager来实现的。

(3)realm:用于获取用户身份和拥有权限,即如判断用户名和密码是否匹配,判断用户是否拥有某些权限。

三、shiro身份认证和授权流程步骤大体如下:

1、先收集用户身份和凭证,如用户名和密码,并将其转换为token,传递给Subject进行认证和授权,而Subject又委托给SecurityManager。

2、在realm进行身份认证和授权,认证是判断输入用户名和密码是否正确的过程,认证成功后才能授权,在这里会通过用户id获取该用户拥有的所有角色和所有权限,以供后面判断该用户是否有权限访问特定资源。

以上步骤做好用户认证和授权的准备工作,接下来就是怎么给资源(如方法)加访问控制权限,比如用户列表只有拥有“用户管理”权限的人才能看见,那么怎么加这个限制呢?

3、shiro提供jsp标签和java注解,用来判断用户是否拥有某些资源的权限,这里我用java注解。shiro提供了五种注解,只需将这些注解定义在想要安全控制的方法上即可。

(1)RequiresGuest:加此注解的方法可被匿名用户访问

(2)RequiresUser:加此注解的方法只能被已登录的用户访问(包括:已认证或已记住)

(3)RequiresAuthentication:加此注解的方法只能被已认证的用户访问(不包括已记住)

(4)RequiresRoles:加此注解的方法仅被指定角色的用户访问

(5)RequiresPermissions:加此注解的方法仅被指定权限的用户访问

4、接下来j要做的事情就是,怎么在访问一个方法时获取这个方法的注解里的角色/权限,并与第2步获得的用户拥有的角色/权限做比较,如果用户拥有的角色/权限包含了此方法上注解里的角色/权限,那么,用户就可以调用该方法,如果不包含,则用户将不能调用该方法,并返回到一个提示未授权的页面。现在问题来了,像jfinal这样的web框架怎么使用shiro拦截所有请求,判断是否已认证或有权限呢?

(1)在web.xml中配置如下节点

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"><listener><listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class></listener> 	<filter><filter-name>ShiroFilter</filter-name><filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class></filter><filter-mapping><filter-name>ShiroFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>
</web-app>

通过上面的配置,EnvironmentLoaderListener在容器启动时初始化SecurityManager,通过ShiroFilter拦截请求并完成认证与授权。

(2)具体获取每个方法上的注解,并判断用户是否有权限调用该方法,大飞已经实现了,用他的就可以。

转载于:https://my.oschina.net/u/2427561/blog/1526528

相关文章:

零基础学习Java培训有什么攻略

零基础学习Java培训有什么攻略?java是主流编程语言之一&#xff0c;我们在学习Java的时候需要制定Java学习路线图&#xff0c;Java涉及到的知识点非常的多&#xff0c;我们该从何学起呢?怎么系统的学习呢?来看看下面的详细介绍。 一、Java学习阶段 将Java学习过程分为3个阶段…

php去掉字符串的最后一个字符 substr()的用法

今天项目中用到&#xff0c;去掉字符串中的最后一个字符原字符串1,2,3,4,5,6,去掉最后一个字符","&#xff0c;最终结果为1,2,3,4,5,6代码如下&#xff1a;$str "1,2,3,4,5,6,"; $newstr substr($str,0,strlen($str)-1);echo $newstr;系统自带的函数也可…

如何加入LSGO软件技术团队?

背景 马上就要放暑假了&#xff01; LSGO软件技术团队 也要开始招新了&#xff01; 本次招入的同学&#xff0c;我会亲自来带&#xff0c;和你一起学习&#xff0c;共同成长。 我们的主要研究方向是机器学习&#xff0c;再详细一些就是视觉、自然语言处理和量化金融。 以下是…

《MySQL技术内幕:InnoDB存储引擎》读书笔记

2019独角兽企业重金招聘Python工程师标准>>> 1.InnoDB中每一页的大小默认为16kb&#xff0c;但是其也支持压缩页的功能&#xff0c;即将原本16kb的页压缩为1kb、2kb、4kb和8kb。当需要从缓存池中申请4kb大小的页时&#xff0c;MySQL的申请步骤如下&#xff1a; 检查…

UI设计要做什么,UI设计培训都要学什么

UI设计要做什么&#xff0c;UI设计培训都要学什么?相信有很多人都对这个问题比较感兴趣&#xff0c;近几年&#xff0c;UI设计被越来越多的人关注&#xff0c;行业薪资水平也是一路飙升&#xff0c;很多人都在准备学习UI设计&#xff0c;那么具体的内容&#xff0c;下面我们来…

[置顶] 如何搭建一个 Data Guard 环境

在Blog里零零散散的讲了一些DB 维护的东西&#xff0c;比较杂&#xff0c;也比较散。 这里就Oracle Data Guard 这块做一个小结。 主要是流程上的东西。 做个参考&#xff0c;以后装DG&#xff0c;照这个流程走就ok了。 一. 服务器设置1.1 硬盘的规划根据自己的业务量来规划硬…

技术图文:如何进行代码的重构?以封装 BigOne API 为例

背景 自从把“量化交易”作为自己精进的技术方向之后&#xff0c;我做了一些准备工作。 比如&#xff1a; 1. 爬取交易所的公告&#xff0c;根据公告的信息来研判数字货币的短期走势。 这里面有一个“流动性溢价”的概念&#xff0c;等后面我会结合一些例子跟大家聊聊这块的…

《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一3.7.5 使用StAX写出XML文档

3.7.5 使用StAX写出XML文档 在前一节中&#xff0c;你看到了如何通过写出DOM树的方法来产生XML文件。如果这个DOM树没有其他任何用途&#xff0c;那么这种方式就不是很高效。StAX API使我们可以直接将XML树写出&#xff0c;这需要从某个OutputStream中构建一个XMLStreamWriter…

大数据就业前景怎么样?需要学会哪些技术?

智能时代的来临&#xff0c;我们日常生活中的很多技术都可以用大数据来实现&#xff0c;大数据开发行业做为IT行业中的一类更是前景无限。所以很多人想转行做大数据开发。那么现在大数据就业前景怎么样?需要学会哪些技术? 大数据就业前景怎么样?需要学会哪些技术?大数据行业…

技术图文:如何利用 C# 实现 误差反向传播 学习规则?

背景 我们在 如何利用 C# 对神经网络模型进行抽象&#xff1f; 中完成了神经网络的抽象结构&#xff1a; 三个接口&#xff1a;激活函数、有监督学习、无监督学习 三个抽象类&#xff1a;神经元、网络层、网络拓扑 我们在 如何利用 C# 实现神经网络的感知器模型&#xff1f; …

SQL注入漏洞全接触--入门篇

随着B/S模式应用开发的发展&#xff0c;使用这种模式编写应用程序的程序员也越来越多。但是由于这个行业的入门门槛不高&#xff0c;程序员的水平及经验也参差不齐&#xff0c;相当大一部分程序员在编写代码的时候&#xff0c;没有对用户输入数据的合法性进行判断&#xff0c;使…

WannaCry 不相信眼泪 它需要你的安全防御与响应能力

在过去的几天里&#xff0c;WannaCry恶意软件及其变体影响了全球数百家组织与机构。 尽管每个组织都会因各种各样的原因没能及时对存在漏洞的系统做更新保护&#xff0c;或者担心更新实时系统的风险&#xff0c;两个月对于任何组织来用于采取措施保证系统安全也并不算太短的时间…

小白阶段如何学习Web前端知识

学会了UI设计技术&#xff0c;接下来的计划就是要找工作了&#xff0c;UI设计在面试环节的自我介绍很重要&#xff0c;有时候一分钟的自我介绍已经足够让HR判断出你适不适合他们公司&#xff0c;那做为一名UI设计师面试时如何自我介绍呢?来看看下面的详细介绍。 UI设计师面试时…

康泰瑞影推高性能3D/4D超声可视化方案

本文讲的是康泰瑞影推高性能3D/4D超声可视化方案,康泰瑞影(ContextVision)推出的业界首款超声实时3D立体图像增强产品已经配备全新的影像可视化功能。所推出的产品REALiCE?将提供逼真的3D超声影像&#xff0c;提高了诊断质量。 REALiCE软件将GOPiCE?自适应3D/4D立体图像增强产…

New Video Game Controlled By Kissing

unassimilatible writes "Artist Hye Yeon Nam has put her video game where her mouth is — literally — with the creation of a new bowling game thats controlled only by passionate (and awkward) French kissing. The Kiss Controller, as its called, has two…

资料分享:数学建模资料分享 -- 图论部分

背景 今天上午&#xff0c;在教六第一阶梯教室为数学建模俱乐部的同学们分享了有关图论的基本知识和应用。 课后&#xff0c;为同学们留了一个算法实现的小练习&#xff0c;大家可以先做一下。在本图文的末尾处&#xff0c;我把上课的资料以及代码分享出来&#xff0c;供大家…

免费学习编程的10个好工具

互联网时代的快速发展&#xff0c;很多人都在学习编程技术&#xff0c;小编今天为大家推荐的就是学习编程技术会用到的一些编程工具&#xff0c;免费学习编程的10个好工具!希望能够帮助到正在学习的小伙伴们。 免费学习编程的10个好工具&#xff1a; 1. Code/Racer Code/Racer是…

【ZT】我家宝宝不会哭----分享在美国养孩子的妈妈经(必看)

我在美国生了两个孩子&#xff0c;生育前后都有培训班&#xff0c;家庭医生每次洗脑让我受益匪浅&#xff0c;我的两个宝宝在婴儿时期乖巧得好像家里没有小婴儿&#xff0c;我甚至疑心她们会不会哭&#xff1f;如今外婆常拿这句傻话笑我。回国后看到朋友或邻居们被小祖宗折磨得…

资料分享:数学建模资料分享 -- 神经网络部分

背景 周日的时候&#xff0c;为数学建模俱乐部的同学们进行了一场有关人工神经网络方面的分享。虽然在这个方面有一些积累&#xff0c;但过于零散&#xff0c;所以拿了一堆文件拼凑成整体的内容。 幸亏自己有分享的习惯&#xff0c;学会一些知识就写下来&#xff0c;这次就是…

配置文件的简单使用

常见的配置文件格式:1.properties里面内容的格式 keyvalue2.xml后期详细解释若我们的配置文件为properties,并且放在src目录下.我们可以通过 ResourceBundle工具快速获取里面的配置信息使用步骤:1.获取ResourceBundle 对象:static ResourceBundle getBundle("文件名称不带…

软件测试工程师如何提升自己?

在软件测试行业&#xff0c;尤其是今年疫情的发生&#xff0c;想要在这个行业站稳脚跟&#xff0c;有着扎实的技术是非常重要的&#xff0c;今天小编要为大家介绍的内容就是软件测试工程师如何提升自己?希望能够给大家带来帮助。 软件测试工程师如何提升自己?熟练掌握IT核心技…

一些简单的SQL语句

1.创建数据库&#xff1a;create database database-name 2.删除数据库&#xff1a;delete database database-name 3.选择:select * from table where ... 4.插入&#xff1a;insert into table(field1,field2) values(value1,value2) 5.更新&#xff1a;update table set fie…

技术图文:进一步完善自动化交易系统 - 01

背景 最初&#xff0c;我们介绍了 如何利用网格交易法对数字资产进行交易。只要价格存在波动&#xff0c;通过这种方法就能赚取利润。 接着&#xff0c;我们介绍了 如何通过三角套利来交易数字资产。只要三种数字资产&#xff0c;两两存在交易对&#xff0c;就可以建立套利的…

String、StringBuffer与StringBuilder之间区别 (转载)

最近学习到StringBuffer&#xff0c;心中有好些疑问&#xff0c;搜索了一些关于String&#xff0c;StringBuffer&#xff0c;StringBuilder的东西&#xff0c;现在整理一下。 关于这三个类在字符串处理中的位置不言而喻&#xff0c;那么他们到底有什么优缺点&#xff0c;到底什…

女生可以学习Web前端吗?

随着时代的不断发展&#xff0c;女性独立意识越来越高&#xff0c;在职场这方面&#xff0c;很多岗位都有了女性的存在&#xff0c;尤其是IT互联网行业&#xff0c;广阔的发展前景和优厚的福利待遇吸引了很多女性小伙伴想要学习Web前端开发&#xff0c;那么女生可以学习Web前端…

adobe就不敢把融合做得更好一点?

体验了一把flash bulider4 和 flash cs5的结合。 之前说得挺牛B的协同开发也不过如此。还以为会给开发者更多的便利。。。 其也就是让建立一个有外链类的mc的时候&#xff0c;能自动为你在bulider里面提示新建一个类而已。 在flash bulider(flex bulider)中依然不认识flash中的…

apache开启虚拟主机 并进行配置

sudo vi /etc/apache2/httpd.conf 进入 apache 配置文件 在配置文件中搜索 Virtual hosts 如图 把前面的#删掉 #为注释 sudo vi /etc/apache2/extra/httpd-vhosts.conf 打开虚拟主机配置文件对下面的一下代码进行复制并粘贴在下方并更改里面的一些内容 DocumentRoot …

技术图文:进一步完善自动化交易系统 - 02

背景 自己的自动化交易系统起初只有网格交易法一个版本&#xff1a;如何利用网格交易法对数字资产进行交易。后面&#xff0c;加入了ONE、USDT、EOS的三角套利版本&#xff1a;如何通过三角套利来交易数字资产。接着&#xff0c;发现三角套利的个别订单在未全部成交的情况下被…

女士做软件测试的利弊有哪些?

社会在不断的进步&#xff0c;在如今的智能时代&#xff0c;女性独立意识越来越高&#xff0c;很多女性都把重心放在职场上&#xff0c;IT行业出现了越来越多的女性职业者&#xff0c;尤其是软件测试这一块&#xff0c;那么女士做软件测试的利弊有哪些呢?来看看下面的详细介绍…

刻意练习:Python基础 -- Task01. 变量、运算符与数据类型

背景 我们准备利用17天时间&#xff0c;将 Python 基础的刻意练习分为如下任务&#xff1a; Task01&#xff1a;变量、运算符与数据类型&#xff08;1day&#xff09;Task02&#xff1a;条件与循环&#xff08;1day&#xff09;Task03&#xff1a;列表与元组&#xff08;2day…