dorado框架权限控制实现方案 V1.0(8)

2019-02-20 23:57

dorado框架权限控制实现方案参考

String hsql = \UserInfo u left join fetch u.roleInfo where u.username='\+ username + \ List ls = ht.find(hsql); if (ls.size() == 1) { UserInfo userinfo = (UserInfo) ls.get(0); HttpSession session=request.getSession(); session.setAttribute(Sys.LOGINUSER_IN_SESSION_KEY, userinfo); forward=action.findForward(\ String[] lan=language.split(\ Locale local=LocaleHelper.getLocale(lan[1],lan[0]); DoradoContext context=DoradoContext.getContext(); ResourceManager.getInstance().setDefaultLocale(context,context.SESSION, local); }else{ flag=true; } }else{ flag=true; } if(flag){ request.setAttribute(Sys.LOGIN_ERROR_INFO, \用户名密码有误,请确认后重试\ } return forward; } public ActionForward doLogout(Action action, HttpServletRequest request, HttpServletResponse response) throws Exception { request.getSession().invalidate(); AppLog.info(\ return action.findForward(\ } }

如果是合法用户则重定向到main.jsp页面进行系统操作,否则,的调转到login.jsp页面,并且显示错误信息。

由于main页面中的视图实现类实现了dorado.common.DefaultViewModelImplement这是一个自定义的视图实现类,实现该类的目的在于,对于受保护的dorado页面,都将继承自这个视图实现类,每当我们访问受保护的dorado页面时,就会自动先访问这个自定义的视图实现类,在这里我们进行了session级别的用户验证,查看当前访问的用户是否时有效用户,从而达到“未经授权或者登陆”的用户不能够访问该页面的效果。

具体实现代码如下:

第36页 共66页

dorado框架权限控制实现方案参考

public class DefaultViewModelImplement extends DynaViewModel {

protected DBStatement dbs;

HttpDoradoContext dc = null;

public void init(int arg0) throws Exception { } /**

* 判断当前用户是否登录,如果未登录则抛出系统异常AppSecurityException

if (dc == null) { }

super.init(arg0);

dc = (HttpDoradoContext) DoradoContext.getContext();

* 如果用户合法判断它是否有访问该页面的权限,没有抛出系统异常AppSecurityException

* 如果有访问该页面权限那么要从库中遍历出所有不能访问的组件,将其Ignored属性设置为true 这样就可以实现页面级别和组件级别的权限控制 */

protected void initControls() throws Exception {

super.initControls(); dbs = new DBStatement(); /**

* 判断用户是否登录 * */

VariantSet userInfo=(VariantSet)dc.getAttribute(dc.SESSION, if(userInfo==null){ }

String sql = \* from role_view rv where rv.roleid = :roleId\; dbs.setSql(sql);

dbs.parameters().setInt(\, userInfo.getInt(\)); List views=dbs.queryForList();

String configName=this.getConfigName(); int viewId = -1;

Iterator viewsIt=views.iterator(); boolean securityFlag=true; String viewConfig=null; /**

* 判断用户是否有访问当前页面的权限

throw new AppSecurityException();

Sys.LOGINUSER_IN_SESSION_KEY);

第37页 共66页

}

* */

dorado框架权限控制实现方案参考

while(viewsIt.hasNext()){ }

if(securityFlag){ } /**

* 找到用户不能访问的组件,将其Ignored设置为true * 使其不会在页面中输出 * */

sql = \dbs.setSql(sql);

dbs.parameters().setInt(\, userInfo.getInt(\)); dbs.parameters().setInt(\, viewId); List viewControls=dbs.queryForList();

Iterator controlsIt=viewControls.iterator(); while(controlsIt.hasNext()){

VariantSet vs = (VariantSet)controlsIt.next(); throw new AppSecurityException();

VariantSet roleView=(VariantSet)viewsIt.next(); sql = \; dbs.setSql(sql);

dbs.parameters().setInt(\,

VariantSet tempviewConfig = dbs.query();

viewConfig=tempviewConfig.getString(\); System.out.println(viewConfig); if(configName.equals(viewConfig)){ }

securityFlag=false;

viewId = roleView.getInt(\); break;

roleView.getInt(\));

rvc.roleid = :roleId and rvc.viewid = :viewId\;

this.getControl(vs.getString(\)).setIgnored(true); }

}

//关闭数据库连接

dbs.close();

第38页 共66页

dorado框架权限控制实现方案参考

10 Main框架菜单树的实现

当登陆成功之后,我们就进入了系统操作的主界面,此框架界面的预览图在前面章节有介绍过,主要部分为左边的菜单和右边的操作界面。

我们是如何实现菜单的动态加载的呢?

对于框架页面而言,无论iframe里面的页面如何变化,我们会发现地址栏里面的url是不会变化的,当我们点击左边的菜单树,访问右边iframe里面的页面之前我们都必须先访问一次main.jsp这个页面,利用这个特性我们可以来作权限检查,功能类似一个验证过滤器,如果没有登陆或者权限不够的用户是无法访问到未经授权的资源。 实现main.jsp页面:

建立main页面的视图,在dorado/main/下面建立Main.view.xml模型,然后添加各种菜单的组件,具体内容见代码:

menu=\

menu=\

然后是关键的步骤,我们在该视图的实现类中进行各种关键业务逻辑的处理。

由于该类集成自DefaultViewModulImplement这个我们自己实现的视图模型实现类,所以在这里我们不用在考虑用户session级别的验证。直接进入我们在该页面中的主要业务逻辑,这也是一种开发设计利用继承关系的开发技巧。

在此类的initControls()中我们取出所有的菜单,实现代码如下:

第39页 共66页

dorado框架权限控制实现方案参考

protected void initControls() throws Exception {

super.initControls(); dbs = new DBStatement();

String sql = \dbs.setSql(sql);

List ls=dbs.queryForList();

Menu menu=(Menu)this.getControl(\int size=ls.size(); VariantSet temp = null; for (int i = 0; i < size; i++) { } /**

temp = ls.get(i);

NavigateMenu navigateMenu= new NavigateMenu(); navigateMenu.setId(temp.getInt(\

navigateMenu.setMenuName(temp.getString(\navigateMenu.setMenuLabel(temp.getString(\navigateMenu.setMenuPath(temp.getString(\navigateMenu.setMenuIcon(temp.getString(\navigateMenu.setCreateTime(temp.getDate(\navigateMenu.setParentid(temp.getInt(\

MenuItem topMenuItem=menu.addItem(navigateMenu.getMenuName()); topMenuItem.setLabel(navigateMenu.getMenuLabel()); topMenuItem.setPath(navigateMenu.getMenuPath()); topMenuItem.setIcon(navigateMenu.getMenuIcon()); recursionMenu(dbs,topMenuItem,navigateMenu);

* 动态菜单的递归加载方法 * */ private

void

recursionMenu(DBStatement

dbs,MenuItem

topItem,NavigateMenu

第40页 共66页


dorado框架权限控制实现方案 V1.0(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:江苏省中小学生人身伤害事故

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: