-1

嗨,我将在我的 struts2 应用程序上应用基于角色的安全性,但找不到任何工作教程,其中大多数在 xml 文件中定义了用户名和密码,但我正在寻找具有数据库访问权限的教程。

我想做的事 :

当用户登录访问数据库时有一个登录页面以授权然后根据他的角色提供对应用程序不同资源的访问。

4

1 回答 1

1

这种安全性有两个级别 1. 服务器端 2. 客户端

最初,您必须在数据库中设置一个表,例如 task_permissions,其中说明了基于角色的任务权限。

那么这个方法将在服务器端帮助你

private boolean isTaskOpAllowed(String taskId, String operation) throws SQLException {

    String taskAllowedSql = "select"+operation+"from task_permissions where  role_id = ? and task_id = ?";
    PreparedStatement pstmt = null;
    ResultSet rst = null;
    boolean allowed = false;
    Connection conn = <make db connection>
    String role = <take role of user from session>
    try {
        pstmt = conn.prepareStatement(taskAllowedSql);
        pstmt.setString(1, roleId);
        pstmt.setString(2, taskId);
        rst = pstmt.executeQuery();

        if (rst.next()) {
            allowed = rst.getString(1);
        }
    } catch (SQLException se) {
        throw se;
    } finally {
                   cleanUpDbConnection(pstmt, rst);
    }
    return allowed;
}

在 jsp 上,您可以在不同的模块上添加此检查,因此在渲染之前将调用上述函数并告诉您是否将此信息显示给该角色用户

<s:if test="%{@<packagename>.TaskSecurityHandler@isTaskOpAllowed(task,operation)}">

编辑: 另一种方法是缓存基于任务的权限的结果,每次查询该缓存时都会保存数据库命中。

RoleTaskPrmsBean.java用属性 等制作一个 。现在在系统或服务器启动时,从 db task_permissions 表中获取所有记录,并使此类的那么多对象将它们放在 Map 中。现在每次运行上述函数时,您都可以查询该 Map 而不是 db。String role;
String task;
String operation1;
String operation2;
key:task+role

于 2013-02-15T08:17:08.613 回答