Grails Spring Security 验证多个 url 的访问

Posted

技术标签:

【中文标题】Grails Spring Security 验证多个 url 的访问【英文标题】:Grails Spring Security verify access for multiple url 【发布时间】:2014-07-12 23:20:46 【问题描述】:

我想在视图中验证用户是否可以访问多个网址,如下所示:

<sec:access url="/user,/client">

就像角色的 sec:ifAnyGranted 标签:

<sec:ifAnyGranted roles="ROLE_ADMIN,ROLE_SUPERVISOR">

在我的验证中,sec:access url 只适用于一个 url。 有什么办法或替代方法吗?

我正在为 grails 使用 spring-security-core:2.0-RC2 插件。

【问题讨论】:

【参考方案1】:

我不支持多个 URL。您可以创建自己的标签来执行此操作

class CustomTagLib 

    static namespace = "myTag"

    def ifAnyGranted =  attrs, body ->
        List<String> urls = attrs.remove('urls').split(',')
        Boolean hasAccess = Boolean.FALSE
        for (int i = 0; i < urls.size(); i++) 
            hasAccess = sec.access(url: urls.get(i).trim())  Boolean.TRUE 
            if (hasAccess) 
                out << body()
                break
            
        
    

并在视图中使用它:

<myTag:ifAnyGranted urls="/domain/index,/domain/show">
    Something to display if has access to anyone of the URL
</myTag:ifAnyGranted>

【讨论】:

我曾考虑过这样做,但我无法接受没有 Spring 方法可以做到这一点。谢谢,这是我目前的解决方案。

以上是关于Grails Spring Security 验证多个 url 的访问的主要内容,如果未能解决你的问题,请参考以下文章

Grails Spring-Security-Core 插件 - 无法验证用户

来自服务的 Grails Spring Security 身份验证

如何使用 spring-security-core-ldap 插件在 grails 中实现 LDAP 身份验证?

没有身份验证的 Grails Spring Security 插件访问控制/授权?

如何在 Grails 中使用 spring security rest 插件进行身份验证

Grails:Spring Security Core 自定义身份验证 getUserByUserName 返回 null 对象