【问题标题】:Getting a list of all JSP pages in the catalog?获取目录中所有 JSP 页面的列表?
【发布时间】:2014-02-06 18:43:58
【问题描述】:

我有一项服务必须验证给定页面是否存在于 WEB-INF/pages/info/ 目录中。但我不知道如何执行此任务。有什么实现的建议吗?

更新:

我的粗略实现

    @Service
    public class ValidateUserAccessToPageService {
    public boolean validate(String page, HttpServletRequest req) {
        if (!req.getRequestURI().equals("/favicon.ico")) {

            ServletContext ctx = req.getServletContext();
            Set<String> pages = ctx.getResourcePaths("/WEB-INF/pages/info/");

            for (String p : pages) {
                if (getLogicName(p).equals(page)){
                    System.out.println("Found matching!");
                }
            }
        }
        return false;
    }

    String getLogicName(String page) {
        return page.substring(page.lastIndexOf("/") + 1, page.lastIndexOf(".jsp"));
    }
    }

和控制器逻辑

    @Controller
    public class RedirectController {

    @Autowired
    ValidateUserAccessToPageService service;

    @RequestMapping ("/{page}")
    String redirect (@PathVariable String page, HttpServletRequest req) {
        return service.validate(page, req) ? page : "error";
    }
    }

【问题讨论】:

标签: java spring-mvc


【解决方案1】:

您可以使用ServletContext#getResource() 方法来检查资源(例如 JSP 文件)是否存在。对于不存在的资源,此方法将返回null

但是小心 - 您的实现可能会引入一些安全问题。如果您允许用户指定任何文件,他可能能够从/WEB-INF/classes/myconfig.properties 中获取例如应用程序配置。如果你真的想实现这样的东西,我会验证 page 参数是否只是字母数字和连字符(例如,用户只会为你提供 /WEB-INF/pages/{pageParam}.jsp )。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-01
    • 2010-12-01
    • 2010-11-30
    • 2012-12-03
    • 2017-07-11
    • 2011-04-26
    • 1970-01-01
    相关资源
    最近更新 更多