【零开始Jfinal_OA】 二:Interceptor 用户认证拦截器(已补充)

可能存在问题或隐患,请大神指正!

由于我们在OA中只有一个登录不需要拦截,其他都不需要拦截,所以我们在下面用到的也是全局拦截器。

定义拦截器

public class AdminInterceptor implements Interceptor {

	public void intercept(Invocation inv) {
		Controller controller = inv.getController();
		String login = "success";
		//判断登录条件是否成立
		if(login.equals("success")){
		        //这里返回登录页面
			controller.renderText("请登录!!");	
		}else{
			inv.invoke();
		}
	}
}

补充:login 这个变量在后面开发的时候就会替换成用户对象或者 一个登录成功的标志,这个在后面开发完成之后再详解。

invoke

  ActionInvocation.invoke()方法是一个递归调用,此递归属于间接递归,即:ActionInvocation.invoke()中调用了Interceptor.intercepte(ActionInvocation ai),而Interceptor.intercepte(ai)方法中开发者又调用了ai.invoke(),形成间接递归关系。

configInterceptor

首先我们回到我们的DemoConfig.java 在方法中添加拦截器

public void configInterceptor(Interceptors me) {
    me.add(new AdminInterceptor());
}

到这里就算完成了拦截器的配置,等到开发出来实际功能之后,会在此文章后面补充代码。

效果

已登录:

【零开始Jfinal_OA】 二:Interceptor 用户认证拦截器(已补充)_第1张图片

未登录:

【零开始Jfinal_OA】 二:Interceptor 用户认证拦截器(已补充)_第2张图片

2016年1月27日补充内容:

拦截器内容

public class AdminInterceptor implements Interceptor  {

    public void intercept(Invocation inv) {
        Controller controller = inv.getController();
        User user = controller.getSessionAttr("User");
        //判断登录条件是否成立(除了登录功能不拦截之外,其他都拦截)
        if(user == null && !inv.getMethod().getName().equals("login")){
            controller.render("/login.html");
        }else{
            inv.invoke();
        }
        
    }

}

注意事项:登录成功之后保存session,在拦截器里在获取session的时候是:controller.getSessionAttr("User");

使用:

 Controller controller = inv.getController();
        User user = controller.getSessionAttr("User");
        获取Session


这只是第二版demo,作为演示,后面开发完成之后可查看源代码。



你可能感兴趣的:(【零开始Jfinal_OA】 二:Interceptor 用户认证拦截器(已补充))