首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@Preauthorize in GWT

@Preauthorize in GWT
EN

Stack Overflow用户
提问于 2014-01-31 06:39:49
回答 2查看 212关注 0票数 0

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

代码语言:javascript
复制
@Service
@PreAuthorize("hasAnyRole('ROLE_ADMIN')")
public class GetAuditDataListHandler extends AbstractActionHandler<GetAuditDataListAction, GetAuditDataListResult> {
// Code here
}

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

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-31 17:42:49

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

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

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

票数 1
EN

Stack Overflow用户

发布于 2014-02-01 09:17:44

您不能添加一个Servlet过滤器来捕捉这个特殊的异常并将其转换为您想要的HTTP响应吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21473970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档