【发布时间】: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";
}
}
【问题讨论】:
-
是否需要递归进入子目录?
-
也许你可以试试 apache commons fileio stackoverflow.com/questions/19776063/…
-
ServletContext#getResourcePaths()... docs.oracle.com/javaee/6/api/javax/servlet/… -
好的。似乎没事。我写了简单的解决方案。好吗?
-
再次查看问题
getResource()可能更适合您的用例。如果文件不存在,它应该返回 NULL。 docs.oracle.com/javaee/6/api/javax/servlet/…
标签: java spring-mvc