0

在我的 spring-3 应用程序中,我有一个 AuthenticationInterceptor(它基本上是一个拦截器)来检查用户的权限。我正在使用 SpringMultipartResolver尝试将文件上传到服务器。我现在面临的问题是我希望根据用户权限执行不同的操作,以防MaxUploadSizeExceededException. 但是我看到这个异常发生在 DispatcherServlet 级别并且被HandlerExceptionResolver 我希望能够在任何这种情况发生之前调用我的 AuthenticationInterceptor 捕获?有没有直截了当的方法。

4

2 回答 2

1

问题是在请求被分派到控制器之前发生异常,因此,您的拦截器也永远不会触发。我想你已经弄清楚了那部分。

想要绕过那个...

对于初学者,我将通过使用 servlet 过滤器将身份验证机制移出 servlet 的前面。话虽这么说,当像 Spring Security 这样的优秀产品可以为您做到这一点时,在该领域推出您自己的解决方案几乎没有意义。

一旦您转换到 Spring Security(或类似的),用户的 SecurityContext(角色、权限等)将在异常发生并被捕获时得到解决。

现在,如果我正确阅读了您的问题,您似乎可能希望根据用户的角色、权限等以不同的方式响应异常。此时应该可以。您将实现一个自定义的 HandlerExceptionResolver 来检查 SecurityContext 以查看用户是否具有特定的角色或权限,然后做出相应的响应。

希望有帮助!

于 2012-05-18T21:29:03.467 回答
0

在调用 Handler 代码之前,有两种基本的方式来处理流内的操作:

  1. 实现接口,并在方法HandlerInterceptor中编写要运行的代码preHandle
  2. @Aspect使用并配置切入点创建一个切面以运行@Before方法调用

无论哪种情况,您都可以使用检查登录用户的角色SecurityContextHolder.getContext().getAuthentication().getAuthorities(),然后根据角色成员资格决定要做什么。

于 2012-05-20T15:21:58.147 回答