我正在使用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
中添加这个beanbeans = {
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类?
请告诉我一个方法..提前致谢
答案 0 :(得分:1)
插件期望请求映射类中的url
字段为String,以便使用您必须的子类RequestMapFilterInvocationDefinition的其他类型来正确提取URL模式,并安装您的自定义类作为应用程序的resources.groovy中名为objectDefinitionSource
的bean,以替换doWithSpring
中SpringSecurityCoreGrailsPlugin.groovy提供的默认bean定义。