相关疑难解决方法(0)

设置多个@ControllerAdvice @ExceptionHandlers的优先级

我有多个用类注释的类@ControllerAdvice,每个类都带有一个@ExceptionHandler方法.

一个处理Exception的目的是如果找不到更具体的处理程序,则应该使用它.

可悲的是,Spring MVC似乎总是使用最通用的case(Exception)而不是更具体的case(IOException例如).

这是人们期望Spring MVC的表现吗?我正在尝试模拟来自Jersey的模式,它评估每个ExceptionMapper(等效组件)以确定它处理的声明类型与已抛出的异常的距离,并始终使用最近的祖先.

exception-handling spring-mvc

68
推荐指数
5
解决办法
4万
查看次数

MVC拦截器与Spring安全过滤器vs其他东西......?

我在我的Web应用程序中使用Spring-MVC和Spring Security.它包括用户注册页面和私人用户面板.我现在设置了以下网址模式:

  • whatever/myapp/login 用户登录
  • whatever/myapp/register?step=1 开始注册
  • whatever/myapp/account/** 私人区域视图(页面)
  • whatever/myapp/pending 注册后流程完成后显示的视图
  • whatever/myapp/blocked 帐户被屏蔽的视图
  • whatever/myapp/register/retry 如果注册失败,请允许重试

基本上,下面的这些URL应该要求用户身份验证,即需要登录:

  • whatever/myapp/account/** (私人区域页面)
  • whatever/myapp/pending (此页面设置了一个定时器,可以重定向到/ account/home)
  • whatever/myapp/register/retry

使用Spring安全性非常简单.但是,无论通过Spring安全性进行用户身份验证,私有区域页面都应该是可访问的,具体取决于用户的当前帐户状态(存储在我的数据库中).

更具体地说:如果用户试图访问私有区域(/account/**)中的任何内容,则应根据状态向他显示相应的视图(重定向到适当的页面).我定义了这些状态:

  • suspended - 涉及待审视图
  • enabled - 允许完全访问
  • disabled - 这里不相关
  • retry_allowed- 涉及重试视图
  • blocked - 涉及帐户被阻止的视图

目前,我有一个MVC拦截器设置/account/**,它检查用户状态,并重定向到适当的页面,但不知何故,我感觉这不是真正理想或适当的解决方案,因为我面临奇怪的行为,如多个控制器调用...而且我不太确定何时返回true/ falsepreHandle()方法内.这是拦截器的代码片段:

@Override
public boolean preHandle(
    HttpServletRequest request, 
    HttpServletResponse response,
    Object arg2) 
    throws Exception {

IPanelUser pUser =  (IPanelUser) SecurityContextHolder.getContext()
        .getAuthentication().getPrincipal();

// check principal first and then load from DB
// "suspended" is …
Run Code Online (Sandbox Code Playgroud)

java spring-mvc filter spring-security interceptor

14
推荐指数
1
解决办法
1万
查看次数