JFianl整合Shiro(一)

Posted by Michael on 2016-08-27

Apache Shiro是Java的一个安全框架,也是我第一个使用的Java安全框架。在我的入门级开源项目JFinal-Paladin中,我进行了一些实践,总体感觉还是非常棒的,该考虑到的都感觉已经考虑到。对比之前所接触过的php框架里面安全模块,感觉只有过之而无不及。个人体验而已,有意见的朋友请喷😃。
本文主要来讲述下在JFianl中集成Shiro过程中的经验和想法。

入门必看

英文好的可以直接看官网教程,英文不好的可以看下开涛的博客《跟我学Shiro》系列

在看教程之前,最好了解想一些shiro的概念:Apache Shiro Terminology

自己入门时踩的坑

一开始的时候,我自己搞了一个JFinal的全局Interceptor,用来做Shiro的权限判断。原因是一开始不了解Shiro,不知道运用ShiroFilter,理所当然地从JFinal的层面进行思考。

当然,在JFinalInterceptor中也是可以做一些权限的判断的,不过顺序上面先要经过ShiroFilter,然后才会到JFinalFilter,真正进入JFinal

现成方案

可以直接拿来用,可以做参考,我在实践的时候,也参考了不少

JFinalShiroPlugin

项目地址:http://git.oschina.net/myaniu/jfinalshiroplugin

JFinal_Authority

项目地址:http://git.oschina.net/jayqqaa12/JFinal_Authority

Dreampie/jfinal-shiro

项目地址:https://github.com/Dreampie/jfinal-shiro

现成方案之个人感受

部分现成方案中使用了Plugin、Interceptor、Annotation的方式来集成Shrio,个人不是非常喜欢,个人感觉有2个痛点:

1、需要好多代码去实现Plugin、Interceptor、Annotation,虽然别人写好了,但是你还是得去了解源码,万一有个坑呢:),毕竟不是什么大而成熟且运用广泛的解决方案

2、你项目里有这么多代码,想想一下

  • 某一天你想知道哪个Controller或Action里面加了Shiro鉴权,哪些没有加
  • 某一天你想知道各个加了Shrio鉴权的Controller或Action所对应的权限表达式是什么
  • 某一天你想知道加一个权限判断,或去掉一个

你得去找,去改,重新编译,重新部署。不管你疯不疯,反正我感觉我会疯的。

我的选择

既然Shiro是专业的那就让它做好该做的。

  1. 在shiro.ini里面,配置自定义Realm+自定义filters+url表达式,来实现自定义的验证方式
  2. 用web来配置:资源、角色、用户、权限

待续…
下一篇中我将会整理具体的实现步骤