关于JFinal中权限设计的问题

发布于 2021-11-30 02:46:12 字数 3008 浏览 843 评论 5

@JFinal 你好,想跟你请教个问题:

用户在成功登陆后将sessionId存入Cookie,并将用户信息保存在缓存中。之后在controller中通过getCookie("sessionId")获取sessionId,通过该sessionId在缓存中获取用户信息。代码如下所示:

public class LoginController extends Controller {
/**
	 * 登录
	 */
	 @Clear
	public void login(){
		String userName = getPara("loginuser");
		String password = getPara("loginpwd");
		User user = User.dao.findUserIncludeMenuInfo(userName);
		if(StringUtil.isEmpty(userName) || StringUtil.isEmpty(password)){
			this.setAttr("loginState", "3");
			this.setAttr("loginInfo", "用户不存在!");
			this.setAttr("userName", userName);
			render("/ui/login.html");
		}else if(user==null){
			this.setAttr("loginState", "0");
			this.setAttr("loginInfo", "用户不存在!");
			this.setAttr("userName", userName);
			render("/ui/login.html");
		}else{
			this.setCookie("sessionId", getSession().getId(), 120*60);
			CacheKit.put("loginUser",this.getCookie("sessionId"), user);
			this.setAttr("loginState", "10");
			this.setAttr("loginInfo", "登录成功!");
			this.setAttr("userName", userName);
			render("/ui/main.html");
		}
	}
}


public class NoticeController extends Controller {
	public void add(){
	    User user =  CacheKit.get("loginUser",getSession().getId());
            //do something...
        }
}

我还定义了一些标签类,代码如下所示:

public class TopButtonDirective implements TemplateDirectiveModel  {
	
	@SuppressWarnings("rawtypes")
	@Override
	public void execute(Environment env, Map params, TemplateModel[] loopVars, TemplateDirectiveBody body) throws TemplateException, IOException {
		// TODO Auto-generated method stub  Menu menu = Menu.dao.findMenusByEnName(params.get("menuEnName").toString());
		//User user = CacheKit.get("loginUser",getSession().getId());
	        StringBuffer buttonHtml = new StringBuffer("<a href="");
    	        if(user.isHaveThisMenu(menu)){
                   env.getOut().write(buttonHtml.toString());
               }
        }
}

该标签写在页面模板中,通过判断当前用户的权限列表中是否包含当前的菜单按钮,从而决定是否显示。

问题就来了,正如上面的代码中


//User user = CacheKit.get("loginUser",getSession().getId());
这一句我需要通过得到cookie或者session来获取当前用户的sessionId,从而在缓存中得到当前的用户权限信息。不知道是否有什么好的解决办法吗?或者说我的这种设计思路本身就有问题?


望不吝赐教,多谢。





如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

筱果果 2021-12-04 17:00:59

回复
注意看面代码的这句:inv.getController().setAttr("loginUser", user); 已然将 loginUser 放到 attr 中去了,这样就可以在很多地方拿到了

疾风者 2021-12-04 16:36:31

回复
多谢。如您所说这样一来在controller中、页面中等都可以很容易的获得。可是要想在TopButtonDirective类中直接获得却还是没有办法啊。

本宫微胖 2021-12-04 15:01:42

回复
怎么没办法啊? 第二个参数 Map params,直接用一下:params.get("sessionId") 即可打完收工,要活学活用

顾挽 2021-12-04 10:04:46

回复
嗯,明白了。多谢您耐心的回复。

琴流音 2021-12-04 01:45:17

谢波总!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文