视图中获取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字段我也是通过看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);折腾视图,折腾了一天。:(