NutzCN Logo
问答 nutz集成shiro做权限控制不生效
发布于 2730天前 作者 xudanfly 2528 次浏览 复制 上一个帖子 下一个帖子
标签:

shiro.ini

[main]
nutzdao_realm = com.je.web.shiro.realm.MyAuthorizingRealm

cacheManager = org.apache.shiro.cache.ehcache.EhCacheManager
cacheManager.cacheManagerConfigFile=classpath:ehcache.xml
nutzdao_realm.cacheManager = $cacheManager
securityManager.realms = $nutzdao_realm
securityManager.cacheManager = $cacheManager

authc = org.nutz.integration.shiro.SimpleAuthenticationFilter
authc.loginUrl  = /security/login.mvc
logout.redirectUrl= /security/login.mvc


[urls]
/captcha/*           = anon
/security/**         = anon
/resources/**        = anon
/static/**           = anon

按照进阶手册搭起来,亲测可用,引入业务代码后,发现所有shiro的注解@RequiresPermissions都不生效,所有页面的shiro标签<shiro:hasPermission>也不生效,项目启动和运行过程中没有报任何错,求指点。
主入口:

@IocBy(args = {"*js", "ioc/",
        "*anno", "com.je", 
        "*tx", 
        "*async",
        "*quartz",// 添加quartz插件引用
        "*jedis"}) 
@Modules(scanPackage = true)
@SessionBy(ShiroSessionProvider.class)  //使用Shiro的Session替换NutFilter作用域内的Session
@Encoding(input = "UTF-8", output = "UTF-8")
@SetupBy(CmsSetup.class)
@ChainBy(args="mvc/mvc-chain.js")
public class CmsModule {}

10 回复

检查一下mvc-chain.js里面的是否有NutShiroProccsor

谢谢!
确定有,mvc/mvc-chain.js

var chain={
    "default" : {
        "ps" : [
        	  "com.je.web.mvc.LogTimeProcessor",
              "org.nutz.mvc.impl.processor.UpdateRequestAttributesProcessor",
              "org.nutz.mvc.impl.processor.EncodingProcessor",
              "org.nutz.mvc.impl.processor.ModuleProcessor",
              "org.nutz.integration.shiro.NutShiroProcessor",
              "org.nutz.mvc.impl.processor.ActionFiltersProcessor",
              "org.nutz.mvc.impl.processor.AdaptorProcessor",
              "org.nutz.mvc.impl.processor.MethodInvokeProcessor",
              "org.nutz.mvc.impl.processor.ViewProcessor"
              ],
        "error" : 'org.nutz.mvc.impl.processor.FailProcessor'
    }
};

大致看了下日志,只在启动的时候有关于shiro的日志,后来系统中所有的操作均没有相关日志,我也猜测是没有进入NutShiroProccsor

debug一下NutShiroProcessor看看

果然debug没有进去,不明白.....
引入源码后,NutShiro的方法scanRolePermissionInPackage报错,

RequiresPermissions pr = (RequiresPermissions)method.getAnnotation(RequiresPermissions.class);
/*    */         String permission;
/* 84 */         if ((pr != null) && (pr.value().length > 0)) {
/* 85 */           String[] arrayOfString2 = pr.value(); localObject = arrayOfString2.length; for (role = 0; role < localObject; role++) { permission = arrayOfString2[role];
/* 86 */             permissions.add(permission);
/*    */           }
/*    */         }

不知道是不是插件版本影响的,没读过源码抱歉

是最新版的插件吗??

是的,都是用的最新版本
nutz-1.r.61.jar
nutz-plugins-daocache-1.r.61.r2.jar
nutz-integration-jedis-1.r.61.r2.jar
nutz-integration-shiro-1.r.61.r2.jar
shiro-all-1.3.2.jar
jdk1.8.0_92

额,没有经过NutShiroProcessor的process方法??

有个奇怪的地方, 你说

<shiro:hasPermission>

不生效,这是jsp标签吧??

全部重试一遍,又经过NutShiroProcessor的process方法,汗,
是jsp标签,jsp内所有按钮都加了<shiro:hasPermission>,但是不管分没分配权限照样显示
<%@taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>

<shiro:hasPermission name="zlgl:car:add"> 新增</shiro:hasPermission>

doGetAuthorizationInfo返回的auth里的Permissions里能返回所有已授权限

那看来是返回的权限不对哦

非常感谢@wendal
我脑洞清奇的想出了多层命名的permission,类似这样zlgl:car:add,改成一个冒号car:add就可以了,还是要多看文档(⊙﹏⊙)b
返回的权限格式一个不对导致所有权限控制失灵,改完数据后解决了问题

添加回复
请先登陆
回到顶部