JFinalShiroPlugin:支持 jfinal 模板shiro标签

JFinalShiroPlugin

是针对@玛雅牛 JFinalShiroPlugin 在 **jfinal 3.0+ ** 版本 做的一个扩展,支持shiro 标签。

如果你使用的3.3版本,请直接看https://gitee.com/log4j/jfinalshiroplugin/tree/1.3/ 的 readme

使用方法

1. pom加入

<dependency>
    <groupId>com.github.jieblog</groupId>
    <artifactId>jfinal-shiro</artifactId>
    <version>1.0</version>
</dependency>

最新的代码请 clone :https://gitee.com/log4j/jfinalshiroplugin mvn install


2. 配置jfinal config

如果使用jf template 的话,构造ShiroPlugin(engine),注意不再是原来 Routes对象啦。

public class LmsCoreConfig extends JFinalConfig {
  
    private Engine engine;

    /**
     * 配置模板引擎
     *
     * @param me Engine
     */
    public void configEngine(Engine me) {
        this.engine = me;
    }

    /**
     * 配置插件
     *
     * @param me Plugins
     */
    public void configPlugin(Plugins me) {
        ShiroPlugin shiroPlugin = new ShiroPlugin(engine);
        shiroPlugin.setLoginUrl("/login");
        shiroPlugin.setUnauthorizedUrl("/unauthorized");
        me.add(shiroPlugin);
    }

    /**
     * 配置拦截器
     *
     * @param me Interceptors
     */
    public void configInterceptor(Interceptors me) {
        me.add(new ShiroInterceptor());
    }

}

3.页面使用

获取Subject Principal 信息
  #principal()


用户没有身份验证时显示相应信息,即游客访问信息。
 #guest()
   body
 #end


用户已经身份验证/记住我登录后显示相应的信息。
 #shiroUser()
   body
 #end

用户已经身份验证通过,即Subject.login登录成功,不是记住我登录的
 #authenticated()
    body
 #end
 

用户已经身份验证通过,即没有调用Subject.login进行登录,包括记住我自动登录的也属于未进行身份验证。
 #noAuthenticated()
    body
 #end

 验证当前Subject是否有该权限
 #hasPermission(permissionName)
    body
 #end
 
验证当前用户是否属于以下角色
#hasRole(roleName)
 body
#end
 
验证当前用户是否属于以下全部角色
 #hasAllRoles(roleName1,roleName2)
    body
 #end
 
验证当前用户是否属于以下任意一个角色
 #hasAnyRoles(roleName1,roleName2)
    body
 #end
 
验证当前Subject是否有下列全部权限
 #hasAllPermission(permissionName1,permissionName2)
    body
 #end
 
验证当前Subject是否没有该权限
  #lacksPermission(permissionName)
     body
  #end

验证当前Subject是否没有角色
 #lacksRole(roleName)
    body
 #end

4.特殊情况处理

如果 共享函数模板文件中有使用 shiro标签时,要在afterJFinalStart 后加入,而不是在configEngine中

   /**
     * 启动后回调
     */
    public void afterJFinalStart() {
        engine.addSharedFunction("xxxx.html");
    }

PS

例子可以参考:http://git.oschina.net/log4j/LMS 


有啥问题阔以加我Q:154987607

评论区

lyh061619

2017-11-23 16:16

简单算了下,有很多朋友需要你的这个东西,感谢分享。

JFinal

2017-11-23 16:16

多谢多谢,昨天发布了 jfinal 3.3 , 好多人找我要这个方案

JFinal

2017-11-23 16:21

升级到 jfinal 3.3 以后,貌似只能自己 new Engine() 出来用,因为 configPlugin 被调用的时机在 configEngine 之前

giegie

2017-11-23 16:31

@JFinal 3.3 还没有接触,如果这样子话 看来要改造一下啦 - -

JFinal

2017-11-23 16:44

@giegie 先谢谢了,好多人等着要呢 ^_^

shamj

2017-11-23 17:24

需要集成shiro的框架的话,这个标签是必需的,666

玛雅牛

2017-11-24 10:25

看了代码,Tag的设计非常好,jfinal 3.3下是可以正常启动,但是shiro并未生效,会默认放行所有请求!!!,之前的版本只有自定义Routes会生效,看下 ActionMapping 的getRoutesList的方法就知道了。

JFinal

2017-11-24 17:08

@玛雅牛 自定义一个MyActionMapping extends ActionMapping,然后通过接管一下 ActionMapping ,应用上自己的 MyActionMapping

而在 MyActionMapping 是可以随心所欲接管 Routes 的,这个方案是一定可行的,只是稍微麻烦点

或是的话

2017-12-19 15:02

@玛雅牛 3.3 tag直接报错啊

没牙的小朋友

2017-12-26 21:35

@JFinal 之前的版本configJFinal方法中configRoute方法调用是在configPlugin和startPlugins()调用之前,所以在初始化插件时是可以拿到Routes的,现在3.3,顺序反过来了,所以有问题。不知道为什么要调整这个启动顺序?现在怎么解决?

JFinal

2018-03-09 14:54

@没牙的小朋友 JFinal 3.3 下支持 JFinalShiroPlugin、Shiro: http://www.jfinal.com/share/714

也许这就是萌新吧

2018-05-11 09:47

com.jfinal.template.stat.ParseException: Directive not found: #hasPermission
求解

JFinal

2018-05-11 10:36

@也许这就是萌新吧 #hasPermission 是扩展出来的,需要手动添加一下

JackZeng

2018-05-11 11:00

@JFinal 群主,我就想问问 3.4可不可以哎,新手。难道整个百度就没一个jfinal3.4整合shrio么???

lwcompany

2018-07-14 10:53

jfinal3.4+myaniu 能运行了