Spring MVC使视图引用类型安全;或检测错误的视图名称

时间:2014-02-25 05:08:29

标签: jsp spring-mvc

@Controller处理程序方法可以自由返回任何表面上代表逻辑视图名称的String。当然,视图名称可能不正确,并且ViewResolver无法将其解析为实际视图。

通常,我的所有视图(例如.jsp文件)在应用程序启动时都是已知的,并且我的所有处理程序方法都被硬编码以返回视图名称(例如return "home"return "admin"。简单的静态分析将从处理程序方法中检测到无法解析的返回视图名称。有没有办法在我的应用程序中构建此安全性?

2 个答案:

答案 0 :(得分:0)

JSP的一个简单方法是扩展 InternalResourceViewResolver 并覆盖它的 buildView 方法。

class BadViewDetectingViewResolver extends InternalResourceViewResolver {
    @Override
    protected AbstractUrlBasedView buildView(String viewName) throws Exception {
        final String absoluteViewName = getPrefix() + viewName + getSuffix();

        // Check if file exists or whatever you want.

        return super.buildView(viewName);
    }
}

将此视图解析程序添加到您的应用程序上下文中。

答案 1 :(得分:0)

AFAIK很难做到这一点,因为返回的视图名称是逻辑名称,底层视图技术可能会大不相同,例如jsp,velocity,thymeleaf等.Spring ViewResolver实际上根据它是什么技术来解析它们配置。视图解析器也可以是不同的,例如,InternalResourceViewResolver,ResourceBundleViewResolver,ContentNegotiatingViewResolver等,并且这些在运行时被调用以解析视图而不是在加载应用程序上下文时。