开发者社区> 问答> 正文

JFinal关于静态资源的拦截:报错

@JFinal 你好,想跟你请教个问题:

1、我配置了全局登录校验拦截器,如若没有登录,跳转至登录页面。拦截器中如果使用redirect("/login.html"),freemark代码不会解析,而是直接输出了HTML内容。

2、如果在地址栏直接访问静态资源,如某个页面,拦截器也不会起作用。

该如何解决?谢谢

展开
收起
kun坤 2020-06-14 06:30:39 601 0
1 条回答
写回答
取消 提交回答
  •     使用 redirect("/login.html") 后,浏览器会发起一个请求,而该请求是一个静态资源请求,而 jfinal 只会处理动态请求,静态请求都是由 jetty、tomcat 这类容器来处理的。

        所以解决方法极度简单,没有登录时重定向到一个动态请求即可: redirect("/login"); 当然前提是你要事先建好一个 action,路由为 "/login"

    ######

    貌似redirect("/login.html") 是不允许的吧。是不是手误render(...)?

    一般情况下,除了js,css,图片等静态资源可以访问,其它html,jsp等是不能直接访问的,要经过render渲染。

    ######谢谢!已经解决了!看了官方文档,自定义Handler来处理静态资源请求URL。######

    引用来自“车开源”的评论

    貌似redirect("/login.html") 是不允许的吧。是不是手误render(...)?

    一般情况下,除了js,css,图片等静态资源可以访问,其它html,jsp等是不能直接访问的,要经过render渲染。

    是可以的!只是JFinal中静态资源都交由Web容器来处理,如果使用Freemark,交给容器就不会被Freemark渲染。######

    引用来自“JFinal”的评论

        使用 redirect("/login.html") 后,浏览器会发起一个请求,而该请求是一个静态资源请求,而 jfinal 只会处理动态请求,静态请求都是由 jetty、tomcat 这类容器来处理的。

        所以解决方法极度简单,没有登录时重定向到一个动态请求即可: redirect("/login"); 当然前提是你要事先建好一个 action,路由为 "/login"

    @ JFinal 谢谢!已经解决。只是使用了UrlSkipHandler过滤HTML好像没起作用,后来还是自定义来解决。如果要使用 UrlSkipHandler过滤HTML页面,该如何写表达式?######回复 @Jieven : 两年前的贴子了,正则手误写错,汉######回复 @JFinal : new UrlSkipHandler(".*html", false) 不要盲目相信楼上的######me.add(new UrlSkipHandler("*.html")); 参数是一个正则表达式,只要这个正则能匹配到的url全部会被 skip 掉
    2020-06-14 06:30:47
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载