在我的spring-3应用程序中,我有一个AuthenticationInterceptor (基本上是一个拦截器),它检查用户的特权。我正在使用Spring的MultipartResolver来尝试将文件上传到服务器。我现在面临的问题是,在MaxUploadSizeExceededException的情况下,我希望根据用户权限执行不同的操作。但是,我发现这个异常发生在DispatcherServlet级别,并且被HandlerExceptionResolver捕获。我希望能够在这种情况发生之前调用我的AuthenticationInterceptor吗?有没有一种简单的方法。
发布于 2012-05-19 05:29:03
问题是,异常发生在请求被分派到控制器之前,因此,您的拦截器也不会触发。我想你已经弄明白了这一点。
想要绕过那个..。
对于初学者,我将使用servlet过滤器将身份验证机制移到servlet前面。这就是说,当Spring Security这样的伟大产品可以为你做到这一点时,在这个领域推出你自己的解决方案几乎没有意义。
一旦您转换到Spring Security (或类似的),用户的SecurityContext (角色、权限等)将在异常发生并被捕获时得到解决。
您将实现一个自定义HandlerExceptionResolver,它检查SecurityContext以查看用户是否具有特定的角色或权限,然后做出相应的响应。
希望这能有所帮助!
发布于 2012-05-20 23:21:58
在调用Handler代码之前,有两种基本的方法来处理流中的操作:
HandlerInterceptor接口,并编写您想要在preHandle方法中运行的代码@Aspect创建一个方面,并配置一个切入点来运行@Before方法调用<代码>G29
在这两种情况下,您都可以使用SecurityContextHolder.getContext().getAuthentication().getAuthorities()检查登录用户的角色,然后根据角色成员身份决定要做什么。
https://stackoverflow.com/questions/10652344
复制相似问题