gpt4 book ai didi

java - GWT 中的@Preauthorize

转载 作者:行者123 更新时间:2023-12-01 13:32:45 24 4
gpt4 key购买 nike

我正在使用 GWT 编写我的应用程序。我的应用程序中有两个角色(ROLE_USER 和 ROLE_ADMIN)。 ROLE_ADMIN 有权访问某些处理程序

@Service
@PreAuthorize("hasAnyRole('ROLE_ADMIN')")
public class GetAuditDataListHandler extends AbstractActionHandler<GetAuditDataListAction, GetAuditDataListResult> {
// Code here
}

当我尝试在 ROLE_USER 下访问时,我想显示对话框(“访问被拒绝!”)。但它返回500 服务器上的调用失败;有关详细信息,请参阅服务器日志

com.google.gwt.user.client.rpc.impl.RequestCallbackAdapter.onResponseReceived(RequestCallbackAdapter.java:209)
com.test.web.main.api.client.AuthRemoteServiceProxy$1.onResponseReceived(AuthRemoteServiceProxy.java:74)
com.google.gwt.http.client.Request.fireOnResponseReceived(Request.java:258)
com.google.gwt.http.client.RequestBuilder$1.onReadyStateChange(RequestBuilder.java:412)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:606)
com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)
com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:338)
com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:219)
com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136)
com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:571)
com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:279)
com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91)
com.google.gwt.core.client.impl.Impl.apply(Impl.java)
com.google.gwt.core.client.impl.Impl.entry0(Impl.java:242)
sun.reflect.GeneratedMethodAccessor53.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:606)
com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)
com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:293)
com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:547)
com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:364)
java.lang.Thread.run(Thread.java:744)

最佳答案

Spring 将在执行处理程序之前检查安全角色并抛出异常。

您通常能够在请求的客户端 onFailure() 方法中捕获此异常,但抛出的异常可能不可序列化,或者很可能不可用于 GWT 客户端代码并且无法序列化 - 导致错误.

看起来您正在使用 gwt-dispatch 库?我已经有一段时间没有使用它了,但是你可以覆盖 SpringSecureDispatchServlet并添加您自己的 doUnexpectedFailure(Throwable e) 的实现方法。在那里你可以检查异常以查看它是否是 Spring 安全异常,而不是调用 RPCServletUtils.writeResponseForUnexpectedFailure(...)返回状态代码 500 实现您自己的,返回更合适的错误代码(401 或 403)。

关于java - GWT 中的@Preauthorize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21473970/

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