gpt4 book ai didi

gwt - 转换 Spring Security AccessDeniedException ( 使用 GWT )

转载 作者:行者123 更新时间:2023-12-04 04:50:18 25 4
gpt4 key购买 nike

我正在使用 Google Web Toolkit 并使用 spring security 保护服务器。我想在我的业务对象方法中使用 @PreAuthorize - 注释。

这里的问题是,AccessDeniedException(如果用户无权调用此方法则抛出)不是 GWT 可序列化的。所以我需要在每个调用BO方法的RPC服务方法中实现一个额外的try-catch,手动转换异常。我真的很想避免这种额外的 try catch !

更多解释:

BO(使用 @PreAuthorize 保护)<< 由 >> GWT RPC 调用,它需要额外的 try-catch 来转换异常。

我发现的只是将特定异常映射到特定页面的映射器,但没有关于如何将异常转换为另一个异常的信息(或提供我自己的实现来抛出我的自定义异常)。

我希望我能以你们能理解的方式描述我的问题。

我找到了这个线程:

http://forum.springsource.org/showthread.php?85937-Method-Security-Throw-custom-exception-instead-of-AccessDeniedException

但是 AccessDecisionManager 只抛出 AccessDeniedException 并且我无法获得一些关于如何根据我的需要自定义它的建议。

提前致谢!

最佳答案

我不知道有什么方法可以告诉 Spring Security 使用其他类型而不是 AccessDeniedException。所以我认为你需要在某个地方放置 try/catch block 并更改异常类型。有多个地方可以做到这一点:

  • 您可以覆盖 MethodSecurityInterceptor然后 configure Spring Security to use your class .这里可以抛出任何异常类型,所以转换没有问题。但是我认为做conf会更加困难。
  • 如果您使用所有传入 RPC 调用通过一个 servlet/ Controller (如 here )的解决方案,那么您可以在那里应用转换逻辑。
  • 也许最优雅的解决方案是为每个必要的 bean 应用自定义 AOP 拦截器(可以进行异常包装)。这个拦截器必须实现 org.springframework.core.Ordered接口(interface),它可以使用HIGHEST_PRECEDENCE常量以确保它将在 MethodSecurityInterceptor 之前执行.见 this entry有关排序的更多详细信息(看起来相同的 Ordered 接口(interface)用于两种情况:AspectJ 和标准 AOP)。与 @Around("@annotation(org.springframework.security.access.prepost.PreAuthorize)")您可以将自定义拦截器直接应用于 PreAuthorize 注释,因此无需额外的配置。
  • 关于gwt - 转换 Spring Security AccessDeniedException ( 使用 GWT ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17528451/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com