技术标签: java shiro java web 用Shiro实现两端登录
年前公司网站需要重新开发一个新版本,在架构设计上废了一些劲,我项目架构大概是这样:Spring作为容器,Mybatis做数据持久层,SpringMVC做控制层,Shiro做为安全框架,页面使用tomdjs引擎,大概是这样,由于是功能型网站,需要有前后台登录,后台需要审核以及数据统计和分析等等,所以涉及到了两端登录,这里不多说,直接上关键代码:
<span style="font-size:14px;"><bean id="defineModularRealmAuthenticator"
class="com.icc.base.shiro.authenticator.DefineModularRealmAuthenticator">
<property name="defineRealms">
<map>
<entry key="customerRealm" value-ref="customerRealm" />
<entry key="adminRealm" value-ref="adminRealm" />
</map>
</property>
</bean>
<!-- 自定义前端验证规则 -->
<bean id="customerRealm" class="com.icc.base.shiro.DefineRealm">
<property name="credentialsMatcher" ref="credentialsMatcher" />
<property name="customerService" ref="customerService" />
</bean>
<!-- 自定义后台验证规则 -->
<bean id="adminRealm" class="com.icc.base.shiro.AdminRealm">
<property name="credentialsMatcher" ref="credentialsMatcher" />
<property name="usersService" ref="usersService" />
</bean></span>
在shiro实现登录功能时,Subject的实现类会调用Authenticator这个接口的默认实现类ModularRealmAuthenticator来进行帐号密码以及验证码的验证,这个接口会取得Realm接口的实现类的List进行while循环验证,问题就在这,如果用List我们是搞不清楚前台后台应该用哪一个Realm来验证的,所以我重新实现了一下这个接口:
注:credentialsMatcher这个东西是密码的验证规则,代码没什么含量我就不
在我的博客中,之前有很多文章介绍过JVM内存结构,相信很多看多我文章的朋友对这部分知识都有一定的了解了。那么,请大家尝试着回答一下以下问题:1、JVM管理的内存结构是怎样的?2、不同的虚拟机在实现运行时内存的时候有什么区别?3、运行时数据区中哪些区域是线程共享的?哪些是独享的?4、除了JVM运行时内存以外,还有什么区域可以用吗?5、堆和栈的区别是什么?6、Java中的数组是..._jstack 6258 | grep 1873 -a60
私钥用来签名的,公钥用来验签的。公钥加密私钥解密是秘送,私钥加密公钥解密是签名就拿A给B发送经过签名加密信息来说:1、A对信息签名的作用是确认这个信息是A发出的,不是别人发出的;2、加密是对内容进行机密性保护,主要是保证信息内容不会被其他人获取,只有B可以获取。也就是保证整个过程的端到端的唯一确定性,这个信息是A发出的(不是别人),且是发给B的,只有B才被获得具体内容(别人就算截获信息也不能获得具...
前言在进行python编程开发时,Jupyter和Pycharm是两个比较常用的开发工具。pycharm在运行py文件时会生成以__pycache__命名的缓存文件夹,而jupyter在打开ipynb时会生成以.ipynb_checkpoints命名的缓存文件夹。在进行项目协作或者存档时,这些文件属于非必要的垃圾文件。为了保持上传到github仓库的代码简洁性或者减少项目占用空间,我们或许需要一个自动化程序帮助我们删除掉这些文件。本文将带来解决这种问题的程序!仅需动动手指双击运行一下即可完成!代码_清除jupyter缓存数据的命令
顺序表:定义:是一段地址连续的存储单元依次存储数据元素的线性结构 优点:存取速度高效,通过下标来直接存取 缺点:插入和删除比较慢,不可以实时增长长度 适用场景:适用于需要大量访问元素的,而增加/删除元素较少的程序链表:定义:一种链式存储的线性表,用一组地址任意的存储单元存放线性表的数据元素,称为存储单元为一个节点 优点:插入和删除速度快,保留原有的物理顺序 缺点:查找元素需要遍..._顺序表作为查找表有何优缺点,从操作时间性能上考虑适用于什么场合?
学习jdk源码的时候,我们都会像学习其他源码的时候,想对源码进行调试,但是虽然可以进入断点,但是不能看到断点变量的值。原因:jdk中的Jre里的rt.jar包的class文件编译生成时是设置为不生成调试信息的(javac -g:none)(可以查看javac命令的参数说明)。解决方法是用javac -g对源码重新编译,并覆盖原来的jar包,下面讲讲如何让myelipse调试jdk源码时显示变量值:...
程序员需不需要数学知识?数学是一块敲问砖业务工程师也能拿高薪程序员老用FOR语句已经没有人用C语言如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入数学是一块敲问砖上51JOB、中华英才、猎聘、大街这几大主流招聘网站去查寻J..._网站开发需要数学知识吗
全栈工程师开发手册 (作者:栾鹏)快捷链接:一个demo学会javajava实现使用JDBC-ODBC桥操作数据库java中RandomAccessFile随机文件读写,文件追加和部分读取java使用socket实现一个多线程web服务器java实现代理服务器,接收客户端连接,发送到对应服务器java实现tcp服务器(单线程、多线程)、客户端java使用UDP数据报通讯方式QQ聊天系统:服务器、客
1091 线段的重叠 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 X轴上有N条线段,每条线段包括1个起点和终点。线段的重叠是这样来算的,[10 20]和[12 25]的重叠部分为[12 20]。给出N条线段的起点和终点,从中选出2条线段,这两条线段的重叠部分是最长的。输出这个最长的距离。如果没有重叠,输出0。Input第1行:线段的数...
在计算机中,减法可以用加法来代替,用的就是补码。说到补码,就得说到“模”这个概念。假如我有一个计算机,它只有四个bit,这四个bit所能表示的值的范围用二进制表示是0000到1111,即从0到15。这样,这个计算机就只能表示这16个数,别的东西它就无法表示了。这个16就是这个计算机的“模”,在这个计算机上进行的计算只能在“模”的表示范围之内。如果我们要计算5-3的值,我们既可以用5减去3,也可以..._补码的模
Vue计算机监听属性与组件计算机监听属性计算属性和监听属性的区别计算机监听属性计算机监听属性计算机属性计算属性可用于快速计算视图(View)中显示的属性。这些计算将被缓存,并且只在需要时更新computed:{}计算机监听属性监听属性 watch,我们可以通过 watch 来响应数据的变化watch:{}计算属性和监听属性的区别computed用来监控自己定义的变量,该变量不在data里面声明,直接在computed里面定义,然后就可以在页面上进行双向数据绑定展示出结果或者用作其他处理w_将单价修改为输入框形式,修改单价值可以用watch属性监听变化,重新计算出总价
String、StringBuffer、StringBuilder三者的区别
Java中的参数传递,到底是值传递还是引用传递?错误理解一:值传递和引用传递,区分的条件是传递的内容,如果是个值,就是值传递。如果是个引用,就是引用传递。错误理解二:Java是引用传递。错误理解三:传递的参数如果是普通类型,那就是值传递,如果是对象,那就是引用传递。_ava是值传递还是引用传递