【问题标题】:Unable to find ACL information for object identity 'org.springframework.security.acls.domain.ObjectIdentityImpl找不到对象标识“org.springframework.security.acls.domain.ObjectIdentityImpl”的 ACL 信息
【发布时间】:2015-10-20 12:21:45
【问题描述】:

注意:这个问题仍然没有正确答案!

我正在运行带有 Spring Security 2.0RC5 和 ACL 2RC2 的 Grails 2.4.5。当我使用 ROLE_ADMIN 和 ROLE_USER 帐户登录时,有时会出现以下错误。

2015-08-28 16:05:17,994 [http-nio-8080-exec-7] ERROR [/majestella].[grails]  - Servlet.service() for servlet grails threw exception
Message: Unable to find ACL information for object identity 'org.springframework.security.acls.domain.ObjectIdentityImpl[Type: majestella.Company; Identifier: 50e396b8eebefc5a84]'
    Line | Method
->>  292 | readAclsById     in grails.plugin.springsecurity.acl.AclService
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|     38 | myhotels         in majestella.admin.AdminHotelController
|    198 | doFilter . . . . in grails.plugin.cache.web.filter.PageFragmentCachingFilter
|     63 | doFilter         in grails.plugin.cache.web.filter.AbstractFilter
|     32 | doCall . . . . . in Users_mg_Documents_Grails_GGTS3_6_4_Server_majestella_grails_app_views_admin_index_gsp$_run_closure2
|     39 | run              in Users_mg_Documents_Grails_GGTS3_6_4_Server_majestella_grails_app_views_admin_index_gsp
|    198 | doFilter . . . . in grails.plugin.cache.web.filter.PageFragmentCachingFilter
|     63 | doFilter         in grails.plugin.cache.web.filter.AbstractFilter
|     53 | doFilter . . . . in grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter
|     62 | doFilter         in grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter
|     46 | doFilterInternal in org.grails.jaxrs.web.JaxrsFilter
|   1145 | runWorker        in java.util.concurrent.ThreadPoolExecutor
|    615 | run . . . . . .  in java.util.concurrent.ThreadPoolExecutor$Worker
^    745 | run              in java.lang.Thread
Error |
2015-08-28 16:05:18,035 [http-nio-8080-exec-7] ERROR errors.GrailsExceptionResolver  - NotFoundException occurred when processing request: [GET] /majestella/admin
Unable to find ACL information for object identity 'org.springframework.security.acls.domain.ObjectIdentityImpl[Type: majestella.Company; Identifier: 50e396b8eebefc5a84]'. Stacktrace follows:
Message: Error processing GroovyPageView: Error executing tag <g:include>: Unable to execute include: org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.codehaus.groovy.grails.web.servlet.mvc.exceptions.ControllerExecutionException: Executing action [myhotels] of controller [majestella.admin.AdminHotelController]  caused exception: Runtime error executing action
    Line | Method
->>  527 | doFilter         in /grails-app/views/admin/index.gsp
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Caused by GrailsTagException: Error executing tag <g:include>: Unable to execute include: org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.codehaus.groovy.grails.web.servlet.mvc.exceptions.ControllerExecutionException: Executing action [myhotels] of controller [majestella.admin.AdminHotelController]  caused exception: Runtime error executing action
->>   32 | doCall           in /grails-app/views/admin/index.gsp
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Caused by ControllerExecutionException: Unable to execute include: org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.codehaus.groovy.grails.web.servlet.mvc.exceptions.ControllerExecutionException: Executing action [myhotels] of controller [majestella.admin.AdminHotelController]  caused exception: Runtime error executing action
->>   32 | doCall           in Users_mg_Documents_Grails_GGTS3_6_4_Server_majestella_grails_app_views_admin_index_gsp$_run_closure2
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|     39 | run              in Users_mg_Documents_Grails_GGTS3_6_4_Server_majestella_grails_app_views_admin_index_gsp
|    198 | doFilter . . . . in grails.plugin.cache.web.filter.PageFragmentCachingFilter
|     63 | doFilter         in grails.plugin.cache.web.filter.AbstractFilter
|     53 | doFilter . . . . in grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter
|     62 | doFilter         in grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter
|     46 | doFilterInternal in org.grails.jaxrs.web.JaxrsFilter
|   1145 | runWorker        in java.util.concurrent.ThreadPoolExecutor
|    615 | run . . . . . .  in java.util.concurrent.ThreadPoolExecutor$Worker
^    745 | run              in java.lang.Thread
Caused by ServletException: org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.codehaus.groovy.grails.web.servlet.mvc.exceptions.ControllerExecutionException: Executing action [myhotels] of controller [majestella.admin.AdminHotelController]  caused exception: Runtime error executing action
->>  116 | logThrowable     in grails.plugin.cache.web.filter.AbstractFilter
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|     70 | doFilter         in     ''
|     32 | doCall . . . . . in Users_mg_Documents_Grails_GGTS3_6_4_Server_majestella_grails_app_views_admin_index_gsp$_run_closure2
|     39 | run              in Users_mg_Documents_Grails_GGTS3_6_4_Server_majestella_grails_app_views_admin_index_gsp
|    198 | doFilter . . . . in grails.plugin.cache.web.filter.PageFragmentCachingFilter
|     63 | doFilter         in grails.plugin.cache.web.filter.AbstractFilter
|     53 | doFilter . . . . in grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter
|     62 | doFilter         in grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter
|     46 | doFilterInternal in org.grails.jaxrs.web.JaxrsFilter
|   1145 | runWorker        in java.util.concurrent.ThreadPoolExecutor
|    615 | run . . . . . .  in java.util.concurrent.ThreadPoolExecutor$Worker
^    745 | run              in java.lang.Thread
Caused by ControllerExecutionException: Executing action [myhotels] of controller [majestella.admin.AdminHotelController]  caused exception: Runtime error executing action
->>  198 | doFilter         in grails.plugin.cache.web.filter.PageFragmentCachingFilter
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|     63 | doFilter         in grails.plugin.cache.web.filter.AbstractFilter
|     32 | doCall . . . . . in Users_mg_Documents_Grails_GGTS3_6_4_Server_majestella_grails_app_views_admin_index_gsp$_run_closure2
|     39 | run              in Users_mg_Documents_Grails_GGTS3_6_4_Server_majestella_grails_app_views_admin_index_gsp
|    198 | doFilter . . . . in grails.plugin.cache.web.filter.PageFragmentCachingFilter
|     63 | doFilter         in grails.plugin.cache.web.filter.AbstractFilter
|     53 | doFilter . . . . in grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter
|     62 | doFilter         in grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter
|     46 | doFilterInternal in org.grails.jaxrs.web.JaxrsFilter
|   1145 | runWorker        in java.util.concurrent.ThreadPoolExecutor
|    615 | run . . . . . .  in java.util.concurrent.ThreadPoolExecutor$Worker
^    745 | run              in java.lang.Thread
Caused by ControllerExecutionException: Runtime error executing action
->>  198 | doFilter         in grails.plugin.cache.web.filter.PageFragmentCachingFilter
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|     63 | doFilter         in grails.plugin.cache.web.filter.AbstractFilter
|     32 | doCall . . . . . in Users_mg_Documents_Grails_GGTS3_6_4_Server_majestella_grails_app_views_admin_index_gsp$_run_closure2
|     39 | run              in Users_mg_Documents_Grails_GGTS3_6_4_Server_majestella_grails_app_views_admin_index_gsp
|    198 | doFilter . . . . in grails.plugin.cache.web.filter.PageFragmentCachingFilter
|     63 | doFilter         in grails.plugin.cache.web.filter.AbstractFilter
|     53 | doFilter . . . . in grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter
|     62 | doFilter         in grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter
|     46 | doFilterInternal in org.grails.jaxrs.web.JaxrsFilter
|   1145 | runWorker        in java.util.concurrent.ThreadPoolExecutor
|    615 | run . . . . . .  in java.util.concurrent.ThreadPoolExecutor$Worker
^    745 | run              in java.lang.Thread
Caused by InvocationTargetException: null
->>  198 | doFilter         in grails.plugin.cache.web.filter.PageFragmentCachingFilter
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|     63 | doFilter         in grails.plugin.cache.web.filter.AbstractFilter
|     32 | doCall . . . . . in Users_mg_Documents_Grails_GGTS3_6_4_Server_majestella_grails_app_views_admin_index_gsp$_run_closure2
|     39 | run              in Users_mg_Documents_Grails_GGTS3_6_4_Server_majestella_grails_app_views_admin_index_gsp
|    198 | doFilter . . . . in grails.plugin.cache.web.filter.PageFragmentCachingFilter
|     63 | doFilter         in grails.plugin.cache.web.filter.AbstractFilter
|     53 | doFilter . . . . in grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter
|     62 | doFilter         in grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter
|     46 | doFilterInternal in org.grails.jaxrs.web.JaxrsFilter
|   1145 | runWorker        in java.util.concurrent.ThreadPoolExecutor
|    615 | run . . . . . .  in java.util.concurrent.ThreadPoolExecutor$Worker
^    745 | run              in java.lang.Thread
Caused by NotFoundException: Unable to find ACL information for object identity 'org.springframework.security.acls.domain.ObjectIdentityImpl[Type: majestella.Company; Identifier: 50e396b8eebefc5a84]'
->>  292 | readAclsById     in grails.plugin.springsecurity.acl.AclService
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|     38 | myhotels         in majestella.admin.AdminHotelController
|    198 | doFilter . . . . in grails.plugin.cache.web.filter.PageFragmentCachingFilter
|     63 | doFilter         in grails.plugin.cache.web.filter.AbstractFilter
|     32 | doCall . . . . . in Users_mg_Documents_Grails_GGTS3_6_4_Server_majestella_grails_app_views_admin_index_gsp$_run_closure2
|     39 | run              in Users_mg_Documents_Grails_GGTS3_6_4_Server_majestella_grails_app_views_admin_index_gsp
|    198 | doFilter . . . . in grails.plugin.cache.web.filter.PageFragmentCachingFilter
|     63 | doFilter         in grails.plugin.cache.web.filter.AbstractFilter
|     53 | doFilter . . . . in grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter
|     62 | doFilter         in grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter
|     46 | doFilterInternal in org.grails.jaxrs.web.JaxrsFilter
|   1145 | runWorker        in java.util.concurrent.ThreadPoolExecutor
|    615 | run . . . . . .  in java.util.concurrent.ThreadPoolExecutor$Worker
^    745 | run              in java.lang.Thread

在同一页面上使用具有 ROLE_USER 的帐户我没有收到此错误。

当我重新启动服务器时,ROLE_ADMIN 和 ROLE_USER 用户的错误消失了。可能存在一些缓存问题。

如何解决此错误?

编辑:这是我要求的 GSP:

some html code
<g:include controller="adminUser" action="myUsers" />

我的控制器使用 Spring Security 注解:

@Secured(AccessRole.ROLE_USER)
class AdminController {
 def index() {}
}

编辑:这是我包含的 GSP 的内容:

<%@ page import="test.Hotel" %>


<g:each in="${hotels}" var="hotel">
    <g:render template="hotel" model="[hotel: hotel]" />
</g:each>

【问题讨论】:

  • 您能否展示相关的 gsp 和控制器?

标签: java spring grails groovy spring-security


【解决方案1】:

至少我仍然需要查看您的 GSP,但我敢打赌您的问题与 &lt;g:include&gt; 的使用以及您如何使用 SpringSecurity 有关。

您能否尝试从您的页面中删除 &lt;g:include&gt; 标记并再次运行测试?

问题在于 Spring Security 是使用 Servlet 过滤器实现的,并且您在检查后包含受保护的内容。

可能的解决方法:

  • 尝试将 Spring Security 标签库与您的包含一起使用,或者不要使用 完全包括在内。
  • 另一种解决方案是重构要加载的页面 你的 ajax 片段。

例如,将您的 includes 括在 spring 安全标签中,以仅在用户具有正确角色时显示:

<sec:ifAnyGranted roles="ROLE_USER">
   <g:include controller="adminUser" action="myUsers" />
</sec:ifAnyGranted>

[]的

【讨论】:

  • 我更新了我的帖子。没有包含标签就没有问题。您在这里看到任何解决方法吗?
  • 好的,所以您可能正在使用带有注释的 Sprint Security,对吗?问题在于 Spring Security 是使用 Servlet 过滤器实现的,并且您在检查后包含受保护的内容。也许可以尝试将 Spring Security 标记库与您的包含一起使用,或者根本不使用包含。另一种解决方案是重构页面以使用 ajax 加载片段。
  • 是的,请看我的编辑。这对您有帮助还是您需要更多代码?
  • 问题在于 Spring Security 是使用 Servlet 过滤器实现的,并且您在检查后包含受保护的内容。也许可以尝试将 Spring Security 标记库与您的包含一起使用,或者根本不使用包含。另一种解决方案是重构页面以使用 ajax 加载片段。
  • 所以你说当我不在类上使用 Spring Security Annotation 时它可能会起作用?
【解决方案2】:

Message: Unable to find ACL information for object identity 'org.springframework.security.acls.domain.ObjectIdentityImpl[Type: majestella.Company; Identifier: 50e396b8eebefc5a84]'

您尚未在数据库中为majestella.Company 创建acl 条目,ID 为50e396b8eebefc5a84。每条记录都需要在acl条目和相关表上注册其权限。

【讨论】:

  • 请仔细阅读帖子。正如我所说,它起作用了,但过了一段时间它就不起作用了。
  • 是的,我做到了,但日志显然是这样说的。你检查过数据库记录吗?你也提到了缓存,你也检查过吗?
  • 我应该如何检查缓存?
  • 我使用 ehcache。如何检查?
【解决方案3】:

我仍然没有回答这个问题,但作为解决方法我删除了:

<g:include controller="adminUser" action="myUsers" />

【讨论】:

    猜你喜欢
    • 2020-10-06
    • 2014-07-14
    • 2022-11-30
    • 2020-05-13
    • 2016-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多