在我的spring-3应用程序中,我有一个AuthenticationInterceptor(基本上是一个拦截器),它检查用户的权限。我正在使用Spring的MultipartResolver
来尝试将文件上传到服务器。
我现在面临的问题是,如果是MaxUploadSizeExceededException
,我希望根据用户权限执行不同的操作。
但是我发现此异常发生在DispatcherServlet级别并被HandlerExceptionResolver
捕获
我希望能够在任何这种情况发生之前调用我的AuthenticationInterceptor吗?
有一种直截了当的方式。
答案 0 :(得分:1)
问题是异常发生在将请求分派给控制器之前,因此,拦截器也永远不会触发。我猜你已经找到了那个部分。
想要解决这个问题......
对于初学者,我会使用servlet过滤器将身份验证机制移出servlet的前端。这就是说,当一个像Spring Security这样的优秀产品可以为你做到这一点时,在这个领域推出自己的解决方案几乎没有意义。
一旦转换到Spring Security(或类似版本),用户的SecurityContext(角色,权限等)将在异常发生时被解决并被捕获。
现在,如果我正确地阅读您的问题,似乎您可能希望根据用户的角色,权限等以不同方式响应异常。此时此应该是可能的。您将实现一个自定义HandlerExceptionResolver,它检查SecurityContext以查看用户是否具有某个角色或权限,然后相应地做出响应。
希望有所帮助!
答案 1 :(得分:0)
在调用Handler代码之前,有两种基本方法可以处理内部操作:
HandlerInterceptor
界面,并使用preHandle
方法@Aspect
创建一个方面并配置切入点以运行@Before
方法调用在任何一种情况下,您都可以使用SecurityContextHolder.getContext().getAuthentication().getAuthorities()
检查登录用户的角色,然后根据角色成员身份决定要执行的操作。