【问题标题】:Customizing spring security requestmap in grails 2.3.5在grails 2.3.5中自定义spring security requestmap
【发布时间】:2014-10-06 11:48:30
【问题描述】:

我正在使用 Grails:2.3.5 和 Spring Security 核心插件:1.2.7.3

在 Grails 中,Spring Security RequestMap 是一个单独的表,但在我的应用程序中,我想将 requestMap 概念与现有表一起使用。

我有一个 RolePermissionMap 表,我想将此表用于 RequestMap。

class Role{
    Long id
    String name
    String description
}

class Permission{
    Long id
    String name
    String description
    String requestUrl
}

class RolePermissionMap {
    Long id
    Role role
    Permission permission
}

现在我通过扩展 RequestmapFilterInvocationDefinition 类来覆盖 loadRequestmaps() 方法,如下所示

class RolePermissionMapFilterInvocation extends RequestmapFilterInvocationDefinition {

    @Override
    protected Map<String, String> loadRequestmaps() {
        Map<String, String> data = new HashMap<String, String>();

        for (Object requestmap : ReflectionUtils.loadAllRequestmaps()) {

            // Original code
            //String urlPattern = ReflectionUtils.getRequestmapUrl(requestmap);
            //String configAttribute = ReflectionUtils.getRequestmapConfigAttribute(requestmap);
            //data.put(urlPattern, configAttribute); 

            // modified code
            Permission permission = ReflectionUtils.getRequestmapUrl(requestmap);
            Role role = ReflectionUtils.getRequestmapConfigAttribute(requestmap);
            data.put(permission.getRequestUrl(), role.getName());
        }

        return data;
    }
}

然后我将这个bean添加到resources.groovy中

beans = {
     objectDefinitionSource(RolePermissionMapFilterInvocation)
} 

我也在尝试重写 ReflectionUtils 类,以便根据需要获取 getRequestmapUrl(requestmap) 和 getRequestmapConfigAttribute() 方法的返回类型

当我使用这种方法运行时,出现以下异常

原因:org.springframework.beans.factory.BeanCreationException:创建名为“objectDefinitionSource”的bean时出错:调用init方法失败;嵌套异常是 java.lang.IllegalArgumentException: url matcher is required

为了解析 url 匹配器,我在 resources.groovy 中添加了一个 bean,但它失败了

我需要用 urlMaper 创建一个 bean 还是需要在任何地方提及 ReflectionUtils 类?

请告诉我一个方法..在此先感谢

【问题讨论】:

    标签: spring grails spring-security


    【解决方案1】:

    插件希望您的请求映射类中的 url 字段是一个字符串,为了使用不同的类型,您必须将 RequestMapFilterInvocationDefinition 子类化以正确提取 URL 模式,并将您的自定义类安装为在应用程序的 resources.groovy 中命名为 objectDefinitionSource 的 bean 替换其 doWithSpring 中由 SpringSecurityCoreGrailsPlugin.groovy 提供的默认 bean 定义。

    【讨论】:

    • 这在使用 grails "spring-security-core:2.0-RC4" 插件时工作正常。但我需要使用 grails“spring-security-core:1.2.7.3”插件,在此当我尝试实现 RequestMapFilterInvocationDefinition 但没有类(InterceptedUrl 和 ReflectionUtils)来实现这个时,我也无法找到要实现的插件文档。如果您对此有任何想法,请帮助我。在此先感谢
    • @varun RequestMapFilterInvocationDefinition 在 1.x 版本中仍然存在,只是 in a different package,并且没有 InterceptedUrl 类,因为您需要覆盖的方法只是返回一个 Map。
    • 在使用 1.x 版本进行开发时,我得到“需要 url 匹配器”,它位于 AbstractFilterInvocationDefinition 类中。我的理解是在 1.x 版本中只声明了 _urlMatcher 变量,但在以后的版本中它被定义为 AntPathMatcher urlMatcher = new AntPathMatcher();我尝试对 urlMatcher 进行依赖注入,但它不起作用。请建议我实施。提前致谢
    猜你喜欢
    • 2015-12-31
    • 2015-03-20
    • 2014-10-15
    • 2012-06-26
    • 2011-09-05
    • 2013-02-11
    • 2015-04-22
    • 2015-12-13
    • 1970-01-01
    相关资源
    最近更新 更多