如何检测shiro是不是允许uri或从uri中提取控制器名称

Posted

技术标签:

【中文标题】如何检测shiro是不是允许uri或从uri中提取控制器名称【英文标题】:how to detect whether a uri is allow by shiro or extract controller name from uri如何检测shiro是否允许uri或从uri中提取控制器名称 【发布时间】:2011-05-23 20:43:17 【问题描述】:

我有一个 uri,例如 someController/someAction?param1=aa&param2=bb

是否有一些 grails 方法可以从这个 uri 中提取控制器名称和动作名称。

或者shiro有什么方法可以检测这个uri是允许的吗?


我有一个域 Menu(name,url),现在想获取当前用户允许的菜单列表。

url 比如/auth/login(可能映射为user:login), /user/login

所以两天前我问了这个问题。

现在我将菜单更改为(名称、控制器、操作、参数),并像这样过滤菜单列表:

def subject = SecurityUtils.subject;
menuList.each
  if(it.permission)
     def perm = shiroPermissionResolver.resolvePermission("$it.permission.controller:$it.permission.action")
     def isPermitted = subject.isPermitted(perm)
     println "$isPermitted -> $it.permission.controller:$it.permission.action"
  


对不起,我的英语不好,谢谢你的回复。

顺便说一句,这是另一个关于如何缓存 shiro 的问题: how to use cache permissions in grails shiro


泛滥: 那么你认为存储菜单列表的更好方法是什么? 原因:

    由于用户的权限,它需要向用户显示不同的菜单。 有时我们更新了一个 web 应用程序,但想稍后向用户显示菜单。 所以我们只需要改变比如一个menu.visible。 (比更改硬代码 cfg 或源代码更好)。 我们正在使用 extjs 来显示菜单(所以导航插件无法使用)。

【问题讨论】:

对不起,我无法回答这个问题,你能给我举个例子吗? 我只是认为如果我有一个 url,如何将其更改为控制器 + 动作。也许 /auth/login 正在映射到 user:login 您能帮我理解您为什么将用户界面菜单存储在域类中吗? 【参考方案1】:

Shiro 使用$controller:$action 的约定来获取权限。你有两个选择:

    使用 Shiro 标签 直接使用 Shiro API

在第一种情况下,您可以在 GSP 中添加如下内容:

<shiro:hasPermission permission="someController:someAction">
     <g:link...>
</shiro:hasPermission>
<shiro:lacksPermission permission="someController:someAction">
     No link
</shiro:lacksPermission>

或者,您可以使用 &lt;g:if...&gt; 标记并使用

SecurityUtils.subject.isPermitted("someController:someAction")

直接检查用户是否具有必要权限的方法。

如需了解更多信息,请查看Grails Shiro Tag Library Source 和Shiro API docs。

【讨论】:

感谢您的回复。我只是认为,如果我有一个 url,如何将其更改为控制器 + 动作。也许 /auth/login 正在映射到 user:login 您需要在应用程序的哪个位置进行此项检查?我用过 Shiro 和 Grails 很多次,如果你最终遇到这种情况,可能是因为你没有充分利用 Shiro 和/或 Grails 提供的功能。如果您可以发布更多详细信息,我可能可以帮助您找出问题所在。将一段代码发布到您要进行此测试的地方,我们将从那里开始......

以上是关于如何检测shiro是不是允许uri或从uri中提取控制器名称的主要内容,如果未能解决你的问题,请参考以下文章

检测浏览器是不是支持带有 iframe 的数据 uri 方案

如何在 nodejs/javascript 中解析 A​​zure Blob URI?

如何在 Web 应用程序中检测 tel: uri 方案的可用性?

安装 iPod 时显示奇怪的 URI 字符串

使用 Shiro 插件保护 Grails 应用程序中的一些页面,但不是所有页面

从一段文字中提取出uri信息