您的位置:首页 > 其它

JFinal学习笔记(三) 过滤器实现用户登录验证

2015-09-01 19:50 585 查看
之前由于本人沉迷星际不能自拔导致博客长期没有更新,只能说玩物丧志啊。

这一篇文章按照之前的计划将开始说明jfinal中过滤器的使用方法,并介绍如何通过过滤器来实现用户登录情况的验证。

首先说明一下为什么要进行登录验证,以上一篇文章中的用户登录为例,正常情况用户应该是先访问http://localhost:8080/jfinal_tomcat/如下图所示。


在该页面下输入用户名和密码通过验证后才能跳转至http://localhost:8080/jfinal_tomcat/manage页面,如下图所示。



但是如果用户已经知道了http://localhost:8080/jfinal_tomcat/manage的地址,在不登录的情况下直接在地址栏中输入这个地址并进行访问会怎么样呢,在上一篇文章给出的例子中将会出现这样的情况,如下图所示。



从图中可以看出用户可以对http://localhost:8080/jfinal_tomcat/manage的地址对应的网页进行访问,只是因为没有登录所以用户名显示为null而已,这显然是我们不希望看到的。为了解决这个问题我们就需要通过自定义过滤器的方法来对进行访问的用户进行过滤。而在jfinal中开发者可以通过实现Interceptor接口的方法来快速的实现自定义过滤器的功能,具体步骤如下。

首先请按照前两篇文章介绍的方法完成jfinal的基本配置和用户登录的实现,然后新建一个MyInterceptor类,该类需要实现jfinal框架中的Interceptor接口,并实现接口中的intercept方法。然后在intercept方法中实现具体的过滤条件。这里通过检查session中是否存储的用的nickname来判断当前用户是否已登录,因为之前在login中当用户登录成功后会在session中保存用户的nickname,具体参考第二篇文章中的代码。如果当前session中有nickname的数据则判断当前用户是已登录的,则允许继续访问,如果nickname为空,则停止当前访问,并跳转至登录页面让用户登录,具体代码如下。

package Config;

import javax.servlet.http.HttpSession;

import com.jfinal.aop.Interceptor;
import com.jfinal.core.ActionInvocation;

public class MyInterceptor implements Interceptor {

@Override
public void intercept(ActionInvocation ai) {
// TODO Auto-generated method stub
HttpSession session = ai.getController().getSession();
if(session == null){
ai.getController().redirect("/");
}
else{
String nickname = (String) session.getAttribute("nickname");
if(nickname != null) {
//System.out.println("hello");
}
else {
ai.getController().redirect("/");
}
}
}

}

其中ai.getController().redirect("/");语句是用来实现跳转的,参数是相对于网站首页地址的相对地址,因为这里的登录页及首页所以直接打"/"就可以了,然后在对IndexController类进行修改,在manage方法前加上@Before(MyInterceptor.class),具体代码如下。

@Before(MyInterceptor.class)
public void manage() {
render("manage.jsp");
}


这样就完成了用户登录验证的设置,下面进行具体的测试。首先在不输入用户名密码的情况下直接输入登录后的地址http://localhost:8080/jfinal_tomcat/manage,如下图所示。



然后进行跳转,结果页面自动返回到了登录页面,如下图所示。



这样就实现了用户登录情况的验证和过滤。其实过滤器不光可以实现对用户登录情况的验证和过滤,在复杂的系统中还可以实现对用户权限的过滤,通过在过滤方法中判断当前用户是否有进行该操作的权限来实现对用户操作权限的验证和过滤。

关于jfinal中的过滤器暂行就先讲这些,如果后期有新的发现我会再进一步的进行说明,下一篇我会记录一下我通过jfinal并结合uploadify插件来实现图片上传的具体方法。

PS:希望这几天不要再沉迷星际了!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息