jfinal如何过滤对JSP/html的请求?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jfinal如何过滤对JSP/html的请求?相关的知识,希望对你有一定的参考价值。

public void index()
if (getPara() != null)
renderError404();
// other code here;办法二使用NoUrlPara拦截器:
@Before(NoUrlPara.class)
public void index()
......2、要过滤 .jsp等指定后缀的请求,除了可以通过配置 nginx以外,还使用Handler:
public class JspSkipHandler extends Handler
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);然后在YourJFinalConfig中配置一下这个JspSkipHandler即可,另外还可以使用JFinal提供的UrlSkipHandler 通过正则表达式来解决,例如,以下代码可以过滤所有对静态资源以及jsp、html等的请求:
me.add(new UrlSkipHandler(.+\\.\\w1,4, false));上例中的正则将匹配带有扩展名的文件请求,扩展名最短1位,最长4位。你可根据需要灵活配置正则。
参考技术A jfinal对jsp或者html过滤的请求配置:
public class PermissionHandler extends Handler

@Override
public void handle(String target, HttpServletRequest request,
HttpServletResponse response, boolean[] isHandled)
int indexJsp= target.lastIndexOf(".jsp");
int indexHtml = target.lastIndexOf(".html");
if (indexJsp!= -1 || indexHtml!= -1)
System.out.println(target);
if (request.getSession().getAttribute(Const.LOGINUSER) == null)
System.out.println("没有登陆!跳转到login.html");
target = "/login.html";
else
System.out.println("登陆了,放行!");


nextHandler.handle(target, request, response, isHandled);
参考技术B jfinal通过拦截器过滤请求,可以使用注解来配置Class、Method级别的拦截器。jfinal很容易上手,建议边看官方的帮助手册同时参照官方的demo示例,亲自动手完成一个小项目加以巩固。http://www.jfinal.com/

jfinal框架的初级学习

1.同strust2,使用jfinal框架首先需要在web.xml配置自己的过滤器(com.jfinal.core.JFinalFilter),并初始化JFinalConfig类。

   <filter>
        <filter-name>JFianl</filter-name>
        <filter-class>com.jfinal.core.JFinalFilter</filter-class>
        <init-param>
            <param-name>configClass</param-name>
            <param-value>com.xxxx.jfinal.config.MyJFinalConfig</param-value> 
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>JFianl</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

2.初始化的MyJFinalConfig类为JFinalConfig子类,MyJFinalConfig继承了父类的5个抽象方法:

① configConstant(Constants arg0) 该方法用于初始化系统部分全局参数,如设置是否为开发模式、编码格式、视图解析、URL参数分隔符、POST请求参数大小等等。

    @Override
    public void configConstant(Constants arg0) {
        // TODO Auto-generated method stub
        //设置开发者模式(控制台会输出相关数据),默认非开发者模式
        arg0.setDevMode(true) ;
        //设置编码格式
        arg0.setEncoding("UTF-8") ;
        //设置解析视图类型,默认为FREE_MARKER(即html页面),还有JSP、VELOCITY
        arg0.setViewType(ViewType.JSP); 
    }

② configPlugin(Plugins arg0) 该方法用于配置JFinal需要用到的相关plugin,如缓存机制、数据库连接池、数据库操作等等plugin。

   @Override
    public void configPlugin(Plugins arg0) {
        // TODO Auto-generated method stub
        //数据库连接插件
        C3p0Plugin cp = new C3p0Plugin("jdbc:oracle:thin:@10.0.65.22:1521:orcl", "scott", "xxxx", "oracle.jdbc.driver.OracleDriver") ;
        arg0.add(cp) ;
        //数据库访问插件
        ActiveRecordPlugin arp = new ActiveRecordPlugin(cp) ;
        arg0.add(arp) ;
        // 配置Oracle方言  
        arp.setDialect(new OracleDialect());  
        //设置大小写不敏感
        arp.setContainerFactory(new CaseInsensitiveContainerFactory(true)) ;
        //添加model mapping
        arp.addMapping("teacher", "T_ID", Teacher.class) ;
    }

③ configRoute(Routes arg0) 该方法用于设置控制器Controller的请求映射路径和action中方法的视图部分路径

    @Override
    public void configRoute(Routes arg0) {
        // TODO Auto-generated method stub
        //配置controller及其所匹配的路径(相当于struts.xml中的namespace)
        arg0.add("/test", MyJFinalController.class); 
    }    

④ configHandler(Handlers arg0) 此方法用来配置JFinal的Handler,Handler可以接管所有 web 请求,并对应用拥有完全的控制权,可以很方便地实现更高层的功能性扩展。

⑤ configInterceptor(Interceptors arg0) 此方法用来配置 JFinal 的全局拦截器,全局拦截器将拦截所有 action 请求

3. jfinal的控制中心controller,继承了com.jfinal.core.Controller类,会根据页面请求执行相应方法。

① controller方法与请求映射方式

  默认是请求路径与method名一致,如发请求 localhost:8080/jfinal/test/list ("/test"为该controller的namespace),则默认执行 MyJFinalController类的 list();如果直接发请求 localhost:8080/jfinal/test 则默认会执行MyJFinalController类的 index();

  若使用@ActionKey()注解则会打破之前配置的请求路径映射,如下,此时再请求localhost:8080/jfinal/test/list 则会不会执行list(),@ActionKey("/list")会让之前的namespace无效,此时的正确访问路径为localhost:8080/jfinal/list。

  @ActionKey("/list")
    public void list(){
        
    }

 

以上是关于jfinal如何过滤对JSP/html的请求?的主要内容,如果未能解决你的问题,请参考以下文章

JFinal跳转jsp页面空白

修改 HTML 和 JSP

struts2用过滤器过滤非法jsp请求的时候,对于根文件夹下的请求如何过滤

JFinal Web开发学习使用layUI美化的登录功能

servlet和jsp页面过滤器Filter的作用及配置

JFinal Web开发学习注册界面和后端验证