文档章节

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

冷冷gg
 冷冷gg
发布于 2017/04/05 19:42
字数 470
阅读 89
收藏 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
粉丝 444
博文 113
码字总数 52275
作品 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能否再简便些?

@JFinal 你好,想跟你请教个问题: 最近关注Shiro,感觉它的身份、权限的认证很不错。 找到JFinal的shiroplugin,不过感觉还是有那么一点复杂,请使用过此插件的同学都分享下感受呢~ ///////...

车开源
2014/04/03
3.7K
4
jfinal cms v4.3.0,支持最新版本 jfinal和 beetl

jfinal cms v4.3.0 发布了,加入了最新版本jfinal 3.0和beetl 2.7.11的支持 一直使用beetl,感觉还是很不错的。但是jfinal 3.0也加入了模板功能,暂时还没有修改使用的想法。如果大家有什么建...

Fly的狐狸
2017/02/09
1K
2
Jfinal-ext shiro注解不起作用

我现在环境Jfinal2.0 + Jfinal-ext , 其中用到了ext的shiro,也自定义了Reaml,现在的问题是ext的shiro注解无效,不起作用(使用shiro.ini文件中的urls配置和在代码里直接调用curuser.isPer...

tomney2008
2015/07/17
587
1
JFinal 整合 Shiro

最近整合JFinal和Shiro遇到的问题,希望能给你们提示与帮助。 首先,JFinal和Shiro本人都是刚刚接触,JFinal上手很快,但Shiro上手比较费劲,看了很长时间的文档。 下面说一下整合JFinal配置...

leon_rock
2013/06/02
8K
10

没有更多内容

加载失败,请刷新页面

加载更多

sql根据日期查询,本周,本月,本年,今日相关统计

sql根据日期查询,本周,本月,本年,今日相关统计 昨天 select * from tb where datediff(day, 时间字段 ,getdate()) = 1 今天 select * from tb where datediff(day, 时间字段 ,getdate()) = ...

BraveLN
24分钟前
2
0
Delphi 折叠代码编译变量$REGION

编译变量$REGION,用于在delphi2006以后版本的折叠代码显示,非常方便。 procedure TForm1.Button1Click(Sender: TObject); var uStr: UnicodeString; begin {$REGION '显示uStr变量内容'} ......

dillonxiao
25分钟前
1
0
【更新】SyntaxEditor发布v2018.1,可共享相同代码库

SyntaxEditor最新版本下载 SyntaxEditor是一款强大的代码语法检验控件,采用了当今最前沿的代码编辑的技术,可以为你代码编辑提供强大的管理功能。最新版支持Visual Studio 2013和Windows 8...

电池盒
26分钟前
3
0
如何在基于Bytom开发过程中集成IPFS

本文介绍了基于Bytom开发过程中集成IPFS。 step1: 搭建bytom节点 比原相关资料:https://github.com/Bytom-Community/Bytom_Docs 搭建bytom节点有很多方式,然后开启RPC调用模式。这里推荐用...

比原链Bytom
30分钟前
0
0
sqlyog注册码

sqlyog注册码 1.方式一 用户名: 随意填写 秘钥: ccbfc13e-c31d-42ce-8939-3c7e63ed5417 a56ea5da-f30b-4fb1-8a05-95f346a9b20b a0fe8645-3916-45d4-9976-cb6b88fecc6c b70d7f66-dac2-4462-......

dragon_tech
33分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部