Jfinal学习(二)

xiaoxiao2021-02-28  94

Jfianl学习第二天

今天是第二天使用框架
遇到了不少的问题

视图中获取Session

视图中获取session的方法,通过在全局拦截器中添加,SessionInViewInterceptor

public void configInterceptor(Interceptors me) { me.add(new SessionInViewInterceptor()); //添加全局额拦截器 }

视图获取session

#if(session['loginMemberSession'] != null) <a href="/member/index">#(session['MemberSession'].username)</a> //获取Session中的uername字段

判断POST请求GET请求

我也是通过看jfinal源码,才知道。 在com.jfinal.ext.interceptor包中

/** * Accept POST method only. */ public class POST implements Interceptor { public void intercept(Invocation inv) { Controller controller = inv.getController(); if ("POST".equalsIgnoreCase(controller.getRequest().getMethod())) { inv.invoke(); } else { controller.renderError(405); } } }

使用的话,只需要在控制器或者方法前添加POST拦截器

@Before({POST.class})

 

不过,这个拦截器并不适合我。我需要在一个Action做GET和POST的不同响应。 需要自己手写判断

if("GET".equalsIgnoreCase(getRequest().getMethod())){ //GET请求 renderTemplate("index.html"); return; } POST..do something

判断是否为重复提交

在百度一搜,大多为几年前的答案。 本来就此打算复制粘贴完事,不过刚复制到一半就寻思去jfianl源码中去翻一翻。 很容易就找到了TokenManager,使用十分的简单。 首先要在视图中的提交表单中添加#(Token??),推荐安全用法

<form> #(Token ??) </form>

之后TokenManager提供了三个方法,init没搞懂。 但是主要就是用createToken() 和 validateToken()

createToken("控制器对象","Token名字","时间s"); validateToken("控制器对象","Token名字"); if(TokenManager.validateToken(this, "ninengkandedongwoxiedeshishenmema")){ index("请求被拒接"," ̄□ ̄请勿重复提交"); return; }else //创建防止重复提交的hidden标签 TokenManager.createToken(this,"ninengkandedongwoxiedeshishenmema" ,30);

折腾视图,折腾了一天。:(

转载请注明原文地址: https://www.6miu.com/read-66828.html

最新回复(0)