在grails 2.3.5中自定义spring security requestmap

时间:2014-08-13 07:45:26

标签: spring grails spring-security

我正在使用Grails:2.3.5 和Spring Security Core插件: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;
    }
}

然后我将在resources.groovy

中添加这个bean
beans = {
     objectDefinitionSource(RolePermissionMapFilterInvocation)
} 

我也试图覆盖ReflectionUtils类,也可以根据需要获取getRequestmapUrl(requestmap)和getRequestmapConfigAttribute()方法的返回类型

当我使用这种方法运行时,我会在

下面获得异常

引起:org.springframework.beans.factory.BeanCreationException:创建名称为&#39; objectDefinitionSource&#39;的init时出错::init方法的调用失败;嵌套异常是java.lang.IllegalArgumentException:url matcher是必需的

用于解析url matcher我在resources.groovy中添加了一个bean但是它失败了

我是否需要使用urlMaper创建bean或者需要在任何地方提及ReflectionUtils类?

请告诉我一个方法..提前致谢

1 个答案:

答案 0 :(得分:1)

插件期望请求映射类中的url字段为String,以便使用您必须的子类RequestMapFilterInvocationDefinition的其他类型来正确提取URL模式,并安装您的自定义类作为应用程序的resources.groovy中名为objectDefinitionSource的bean,以替换doWithSpringSpringSecurityCoreGrailsPlugin.groovy提供的默认bean定义。