所有选项均有效,这取决于所需的抽象级别。
在中
Filter,您只能访问
HttpServletRequest和
HttpServletResponse对象,因此与
ServletAPI紧密结合。您也无法(直接)访问所有出色的Spring功能,例如返回要渲染的视图或
ResponseEntity。
在中
HandlerInterceptor,它又一次相同。您可以在
preHandle()没有访问权限的地方直接进行重定向或请求处理,也可以
ModelAndView设置签入的标志
postHandle()。您将有权使用
ModelAndViewSpring
MVC的其他功能,但不能使用。
Spring Security是一个不错的选择,但是我发现它有很多我不喜欢的配置。
我最喜欢的最后一种选择是使用AOP(您也可以使用Spring
Security或Shiro做到这一点)。创建一个类似的注释,
@Private然后注释
@Controller处理程序方法。您使用AOP来建议这些方法。该建议基本上检查某些会话或请求属性中的标志(已授权或未授权)。如果允许,则继续执行处理程序方法,否则,将抛出
UnauthorizedException(或类似的)结果。然后,您还要
@ExceptionHandler为该异常声明一个,在那里您可以完全控制响应的生成方式:(一个
ModelAndView和相关的),a
ResponseEntity,使用注释处理程序
@ResponseBody,直接编写响应等。我觉得您拥有更多的控制权, 如果你想要的话。



