文档章节

【jfinal修仙系列】修改ShiroPlugin支持jfinal3.0

冷冷gg
 冷冷gg
发布于 2017/04/05 19:42
字数 470
阅读 81
收藏 2

在升级到jfinal3.0 以后,原有的shiroplugin不兼容,原来的 routes 是用通过JfinalConfig 注入

new ShiroPlugin(routes)

3.0 routes.getEntrySet() 不再支持。

修改ShiroPlugin 的 star方法


public boolean start() {
        Set<String> excludedMethodName = buildExcludedMethodName();
        ConcurrentMap<String, AuthzHandler> authzMaps = new ConcurrentHashMap<String, AuthzHandler>();
        //逐个访问所有注册的Controller,解析Controller及action上的所有Shiro注解。
        //并依据这些注解,actionKey提前构建好权限检查处理器。
        for (Routes routes : Routes.getRoutesList()) {
            for (Routes.Route route : routes.getRouteItemList()) {
                Class<? extends Controller> controllerClass = route.getControllerClass();

                String controllerKey = route.getControllerKey();

                // 获取Controller的所有Shiro注解。
                List<Annotation> controllerAnnotations = getAuthzAnnotations(controllerClass);
                // 逐个遍历方法。
                Method[] methods = controllerClass.getMethods();
                for (Method method : methods) {
                    //排除掉Controller基类的所有方法,并且只关注没有参数的Action方法。
                    if (!excludedMethodName.contains(method.getName())
                            && method.getParameterTypes().length == 0) {
                        //若该方法上存在ClearShiro注解,则对该action不进行访问控制检查。
                        if (isClearShiroAnnotationPresent(method)) {
                            continue;
                        }
                        //获取方法的所有Shiro注解。
                        List<Annotation> methodAnnotations = getAuthzAnnotations(method);
                        //依据Controller的注解和方法的注解来生成访问控制处理器。
                        AuthzHandler authzHandler = createAuthzHandler(
                                controllerAnnotations, methodAnnotations);
                        //生成访问控制处理器成功。
                        if (authzHandler != null) {
                            //构建ActionKey,参考ActionMapping中实现
                            String actionKey = createActionKey(controllerClass, method, controllerKey);
                            //添加映射
                            authzMaps.put(actionKey, authzHandler);
                        }
                    }
                }
            }
        }
        //注入到ShiroKit类中。ShiroKit类以单例模式运行。
        ShiroKit.init(authzMaps);
        /**
         * 设定登录,登录成功,未授权等url地址
         */
        ShiroKit.setLoginUrl(loginUrl);
        ShiroKit.setSuccessUrl(successUrl);
        ShiroKit.setUnauthorizedUrl(unauthorizedUrl);
        return true;
    }

OK shiro 就可以启动起来了。

扩展shiro标签支持 JfinalTemplate

jfinal提供了很简单的指令扩展,我们通过继承Directive来实现。


/**
 * Created by jie on 2017/4/3.
 * 用户已经身份验证/记住我登录后显示相应的信息。
 * #shiroUser()
 * body
 * #end
 */
public class ShiroUserTag extends SecureTag {

    public void exec(Env env, Scope scope, Writer writer) {
        if (getSubject() != null && getSubject().getPrincipal() != null)
            stat.exec(env, scope, writer);
    }

    public boolean hasEnd() {
        return true;
    }
}

在config中配置模板
me.addDirective("shiroUser", new ShiroUserTag());

则页面中可以

#shiroUser()
  登录认证以后显示
#end

其他标签定义看参考 http://git.oschina.net/log4j

© 著作权归作者所有

共有 人打赏支持
冷冷gg
粉丝 386
博文 110
码字总数 49926
作品 1
潍坊
UI设计师
Jfaker与Shiro是如何集成的

从Web.xml入手。代码片段: <context-param> <param-name>shiroEnvironmentClass</param-name> <param-value>com.jfaker.framework.security.shiro.ShiroIniWebEnvironment</param-value> <......

车开源
2015/01/25
0
0
给JFinal添加Shiro插件功能,支持Shiro所有注解-实现篇

2015年8月3日更新: 支持JFinal 2.0 版本,同时给出了一些实际代码,想见git @JFinal给出了一些好的建议,已重构部分代码。 代码放在oschina的git上,访问地址: http://git.oschina.net/mya...

玛雅牛
2013/06/12
0
8
OSC上关于Jfinal的提问整理(一)

看见Jfinal很火,就手痒痒了,想学一下,无奈入门较慢,没有找到比较全的文档。于是就经常看讨论区大家的提问与解答。后来就忽然萌生了整理下来的想法。其中的问题如果是@Jfinal 回答的,那我...

木川瓦兹
2013/04/23
0
21
JFinal针对ORACLE的timestamp字段解决办法

JFinal是个比较不错的的框架,但JFinal起源时使用mysql数据库,因此在对数据库支持方面还没有达到完美。 本人使用JFinal有一段时间的,由于项目的数据库普遍采用oracle,在使用oracle过程中遇...

真的农夫三拳
2013/06/23
0
6
JFinal 3.4 发布,将极速贯彻到 UI 层

jfinal 的终极目标是全面实现软件开发整个过程的极速开发,极大提升开发效率,极大降低学习成本,极大提升开发体验 jfinal 诞生头五年,已实现 WEB + ORM + AOP 层面的极速开发,赢得了大量开...

JFinal
04/28
0
129

没有更多内容

加载失败,请刷新页面

加载更多

Qt那些事0.0.7

在帮助文档(Overview - QML and C++ Integration)中随缘遇到一张图,是关于C++对象与QML整合介绍的,值得标记下来,虽然大部分功能也有所涉猎,但是还是留个记号,万一哪天我失忆了还想写Q...

Ev4n
8分钟前
0
0
快速幂运算

题:求一个数 data 的 n 次幂,要求时间复杂度为log(n) 1:递归算法: /** * x^3=(x^2)*x;x^7=(x^3)^2 * x * * 递归算法 * @param data 底数 * @param n 次...

偶尔诗文
13分钟前
0
0
Google 宣布将会关闭消费者版本 Google+

Google 家的社交平台 Google+ 原来曾经在今年 3 月发生了一次严重的用户资料外泄事故,但这科网巨擘却一直保密,直至今天华尔街日报把事件披露之后才确认事件。Google 在重申问题已经即时解决...

问题终结者
26分钟前
0
0
腾讯三大运维开源项目齐聚“OSCAR开源先锋日”

10月20日,腾讯开源三大运维开源项目——TARS、蓝鲸和织云Metis首次集结,参与了由中国信息通信研究院主办、云计算标准与开源推进委员会承办的 “OSCAR开源先锋日”。会上,腾讯开源团队与前...

腾讯开源
31分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部