jfinal如何禁止直接访问jsp、html?

已配置拦截器,但jsp不能拦截,可以直接访问后台的.jsp文件。如果禁止直接访问jsp和html文件。查了一些文章,在mainConfig中配置:

/** * 配置全局处理器 */

public class JspSkipHandler extends Handler { 

 @SuppressWarnings("deprecation")

public void handle(String target, HttpServletRequest request, HttpServletResponse response, boolean[] isHandled) {

   int index = target.lastIndexOf(".jsp");

   if (index != -1)

     target = target.substring(0, index);

   nextHandler.handle(target, request, response, isHandled);

 }

}

@Override

public void configHandler(Handlers me) {

me.add(new JspSkipHandler());

//me.add(new UrlSkipHandler(".+\\.\\w{1,4}", false));

}

        但这样一来,都不能访问了,并且是404错误,如何转到/admin/login.jsp?

评论区

紫电清霜

2016-10-19 17:44

放到WEB-INF文件夹下就好了哈~

getthem

2016-10-19 21:18

上面这个代码还是行得通的,但是如果对其中的某几个jsp文件比如login.jsp不拦截过滤该如何处理?

JFinal

2016-10-20 11:30

JspSkipHandler 中的核心代码改成如下就可以了:
if (target.endsWith(".html")) {
HandlerKit.renderError404(...);
} else {
next.handle(target, req, resp, isHandled);
}

坚强的地瓜

2017-04-08 14:04

@JFinal 请问一下,这个HandlerKit.renderError404(...) 的view路径改怎么写啊,我很多页面都在不同的文件夹还有不同的层,我想直接用 绝对路径,request.getScheme() + "://" + prop.get("serverName") + ":" + prop.get("port") + request.getContextPath(), 但是呢 页面最后的路径 前面老是还带着文件夹名字,比如 我敲view/user/index.jsp,最后出现的却是view/user/http://localhost:8080/test,怎么办啊!

坚强的地瓜

2017-04-08 16:28

@JFinal 波哥,我上边的问题貌似解决了,我直接redirect到方法去,但是!!页面跟JS中所有的window.location(xxx.jsp)也给过滤掉了!这个咋办啊!

JFinal

2017-04-08 16:38

@坚强的地瓜 改进下程序,该过滤的过滤,否则放过

坚强的地瓜

2017-04-08 16:46

@JFinal 是要避免使用location这样的打开方式吗,程序里面好多呢,我不太可能对每一个页面做 单独处理啊

坚强的地瓜

2017-04-08 17:12

@JFinal 完了。。href标签也给过滤了。。我的初衷不是这样的啊

JFinal

2017-04-08 17:14

@坚强的地瓜 什么内容被过滤,完全取决于你的 handler 代码怎么写,让代码符合你的初衷就好

坚强的地瓜

2017-04-08 17:27

@JFinal 我傻了,我忘了session这些东西了,非常感谢!

hankingxu

2017-12-22 10:02

@JFinal 波哥我用了这个方法,拦截了html文件,不过,我通过action render(index.html)也是一样访问不了呀

JFinal

2017-12-22 11:38

@hankingxu 路径或者文件名不对而已

热门反馈

扫码入社