`

Jetspeed基于jaas的权限机制

 
阅读更多

Jetspeed基于jaas的权限机制

Jetspeed的权限有两种constraint和permission方式

其中Jetspeed的认证是基于jaas的loginModule实现的,所以这里说是基于jaas的权限机制

 

constraint和permission的区别

授权方式不一样

constraint是基于资源授权的:

优点:基于资源授权简单,选中一个页面或目录就可以授权

缺点:可授权的地方过于分散,因为页面,portlet是在不同的模块

permission是基于角色授权的

优点:在一个模块可统一对页面、portlet等资源统一授权

缺点:授权麻烦一点,先选中角色,再授权,没有基于资源授权简单,模型层和数据库是这么设计,但是前台展现还是按照资源授权

 

 

或许Jetspeed本觉得portal里面有不同资源,每个资源又有自己的管理模块 ,所以最终前台展现是按照资源来授权

 

 

constraint和permission原理

我目前的理解是,他们原理都一样

 

 

先找到一个资源以及它的父亲授予了哪些权限resourcePermission,然后检查当前用户有哪些权限userPermisson(即当前用户拥有的角色,所属群组等principal),最后检查这两个权限是否有交集,有就可访问,反之,则不可访问

 

对了,Jetspeed说它的权限模块式可插拔的,因为我已经看到spring的配置中可选择按constraint或者permission检查权限,有空多研究

 

constraint主要研究代码

 

SecurityAccessController.checkPortletAccess(PortletDefinition portlet, int mask){}

 

 

 

public boolean checkPortletAccess(PortletDefinition portlet, int mask)
    {
        if (portlet == null)
            return false;
        if (securityMode == SecurityAccessController.CONSTRAINTS)
        {
            String constraintRef = portlet.getJetspeedSecurityConstraint();
            if (constraintRef == null)
            {
                constraintRef = ((PortletApplication)portlet.getApplication()).getJetspeedSecurityConstraint();                
                if (constraintRef == null)
                {
                    return true; // allow access
                }
            }
            String actions = JetspeedActions.getContainerActions(mask);
            return pageManager.checkConstraint(constraintRef, actions);                
        }
        else
        {
            try
            {
                AccessController.checkPermission((Permission)pf.newPermission(pf.PORTLET_PERMISSION,portlet.getUniqueName(), mask));
            }
            catch (AccessControlException ace)
            {
                return false;
            }
            return true;
        }
    
    }

 

 

 

permission主要研究代码

 

 

AccessController.checkPermission((Permission)pf.newPermission(pf.PORTLET_PERMISSION,portlet.getUniqueName(), mask));}

 

 

 

这个代码AccessController.checkPermission()是jaas的代码,看来permission机制使用了jaas来实现,调试代码,去吧

 

jetspeed中的安全架构完全遵照Jaas实现

详细设计很值得推敲,要加油罗:

http://portals.apache.org/jetspeed-2/devguide/guide-security.html

 

 

设计思想


Jetspeed的安全模块,建立在JAAS之上,实现了验证和授权两大模块。建议学习本模块前,需要结合JAAS的知识来理解。
(1) Jaas的验证流程
Jetspeed基于JAAS的验证流程,如流程图所以,Jetspeed的验证过程是标准的jaas验证,只不过Jetspeed实现了自己的loginModule:org.apache.jetspeed.security.impl.DefaultLoginModule
(2) Jetspeed基于JAAS的授权流程

Jetspeed的permission授权机制,本质上也使用了Jaas的授权机制,以页面渲染portlet为例子,JAAS权限检查

的具体步骤如下:

  • 引擎调用PageAggregator.aggregateAndRender()渲染portlet
  • 检查portlet权限SecurityAccessController.checkPortletAccess()
  • 通过Jaas的机制判断portlet权限AccessController.checkPermission(Permission portletPermission)
  • 调用jetspeed自定义策略从保护域中检查是否拥有权限RdbmsPolicy.implies(ProtectionDomain protectionDomain, Permission permission
  • 从数据库获取当前用户拥有的所有权限,检查这些权限是否隐含该portlet的访问权限
  • 如果返回true,渲染portlet,如果返回false,没有权限,不渲染portlet
  • 大小: 9.9 KB
分享到:
评论

相关推荐

    基于jetspeed的portlet开发

    ### 基于Jetspeed的Portlet开发 #### 一、引言 随着信息技术的不断发展,企业对于信息的集成管理需求日益增长。门户系统作为整合各类应用与信息资源的重要手段,已经成为众多企业的首选方案。门户系统能够根据用户...

    Jetspeed2 Deployer Guide中文翻译

    本文档是Jetspeed2 Deployer Guide的中文翻译,旨在帮助初学者理解如何部署和配置Jetspeed2的安全机制。 在Jetspeed2的安全部署配置中,有两个主要的认证策略:Permissions(权限)和Constraints(约束)。...

    Jetspeed

    总结一下,Jetspeed 是一个基于Java的开源门户平台,它利用源码和工具提供高度定制化的Web门户解决方案。通过与LDAP的集成,Jetspeed 实现了安全的身份管理和权限控制。理解其源码、工具的使用以及LDIF文件的作用,...

    jetspeed2资料

    Jetspeed2是一款开源的企业级portlet容器和门户框架,它基于Java技术栈,主要用于构建可定制、可扩展的企业级门户系统。这个资料包包含了关于Jetspeed2的详细信息,对于理解并使用Jetspeed2进行门户开发具有很高的...

    jetspeed2

    同时,具备强大的权限管理机制,可以控制不同用户对portlet的访问和操作权限。 3. **内容管理系统**:内置的内容管理系统(CMS)允许用户创建、编辑和发布内容,且与portlet集成,提供了丰富的内容展示方式。 4. **...

    Jetspeed2 Portal 门户技术开发文档

    Apache Jetspeed2 是一个开源的、可扩展的、基于标准的门户框架,用于构建企业级的门户应用。它提供了丰富的功能,包括个性化、内容管理、工作流程以及安全机制,使开发者能够快速构建复杂的多应用程序集成环境。 *...

    jetspeed中文文档 教程 总结

    文档中会详细介绍Jetspeed2的架构,包括Portlet容器、内容管理系统、权限管理、用户会话管理等核心组件。此外,还会涵盖portlet开发,如MVCportlet的实现,以及如何利用Jetspeed的API和服务进行集成。开发者可以通过...

    JetSpeed 高级portlet技术

    - **安全性和权限管理**:支持基于角色的访问控制,保护portlet和门户的安全性。 #### Portlet 概述 Portlet是在门户页面中显示数据的可见组件。一个典型的门户网站页面可能包含多个portlet,每个portlet负责展示...

    Jetspeed 整合资料

    Jetspeed 1 是早期版本,基于JSR-168(Portlet 规范1.0)标准,提供了portlet 的开发和部署框架。这个版本的核心特性包括: 1. **portlet 框架**:Jetspeed 1 提供了一个portlet 容器,能够运行符合JSR-168标准的...

    jetspeed-installer-2.2.2.jar

    Jetspeed是Apache组织开发的一个采用Java和XML的开放源代码的企业信息门户的实现。门户可以让终端用户可以很方 便的访问网络资源(应用、数据库等)。用户可以通过Web浏览器、WAP手机、寻呼机以及其它一些智能设备来...

    JetSpeed2.doc

    此外,JetSpeed2.0还支持多种认证和授权协议,如LDAP、JAAS等,以适应不同环境下的安全需求。 **JetSpeed-2的PORTAL BRIDGE** PORTAL BRIDGE是JetSpeed2.0的一个关键特性,它允许集成各种类型的Web应用程序,如...

    基于Jetspeed的企业信息门户研究与实现

    ### 基于Jetspeed的企业信息门户研究与实现 #### 摘要 随着互联网技术的飞速发展,企业越来越倾向于构建一个统一的Web界面,以此整合企业的信息、业务流程、组织结构及权限管理,从而形成一个高效的信息交互平台。...

    Jetspeed安装与portlet开发.pdf

    Jetspeed是一款基于Java的企业门户框架,由Apache Software Foundation维护。它支持多种标准,包括JSR 168(Portlet规范)。本文档旨在详细介绍如何在个人PC上安装配置Jetspeed,并指导用户创建一个简单的Portlet。 ...

    基于Jetspeed实现企业信息门户构建

    ### 基于Jetspeed实现企业信息门户构建 #### 引言:企业信息门户与信息孤岛挑战 在企业管理与信息化发展的过程中,由于系统分级、组织细化及技术状态的不均衡,导致了“信息孤岛”现象的普遍出现。企业内部各业务...

    jetSpeed2.2.2(最新版源文件)

    JetSpeed是开源的企业门户平台,它基于Java技术栈,提供了构建和管理企业级Web门户的能力。这个特定的版本,jetSpeed 2.2.2,是该软件的最新更新,适用于Java开发环境,特别是那些使用JDK 1.5或更高版本的开发者。...

    jetspeed2.2.0(administrator代码)

    Jetspeed是一个开源的企业门户平台,主要基于Java技术构建,它提供了强大的内容管理和个性化功能。在2.2.0版本中,管理员部分的代码是整个系统的核心组成部分,因为这部分代码负责管理用户、权限、内容以及门户的...

    jetspeed2样式的开发文档

    jetspeed2是一款基于Java的企业门户框架,它提供了丰富的功能来构建复杂的Web应用程序。本文档旨在帮助开发者理解jetspeed2样式的开发流程与细节,特别是关于如何创建和自定义样式。 #### 二、基础知识要求 在开始...

    jetspeed中文文档

    1. **Jetspeed概述**:Jetspeed是一个基于Java技术的开源企业级门户框架,它遵循JSR-168和JSR-286标准,能够整合和管理来自不同源的信息,如Web内容管理系统、应用程序、数据库等。 2. **安装与配置**:文档会详细...

Global site tag (gtag.js) - Google Analytics