Jetspeed2 Security

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
Jetspeed2 Security
1. 安全架构
1.1.      概述
Jetspeed 2 security leverages J2EE authentication and authorization standards for both authentication and authorization through the implementation of a default LoginModule and a default authorization Policy.
Authentication establishes the identity of the user and populates the Subject with all the user principals. In a portal context, the populated Subject is added to the session in the org.apache.jetspeed.security.SecurityValve implementation. The Subject principals are then used to authorize the user's access to a given resource. It leverages JAAS authorization by checking the user's permission with the AccessController. More details on authorization are provided in the JAAS authorization section of this documentation.
1.2.      图示
The following diagram describes the high level security architecture:
2. 主要配置
Jetspeed 2 default security services configuration leverages a relational database as its default persitent datastore for security information. Jetspeed 2 security service provider interface provides a mechanism to replace the default datastore configured.
3 files are involved when configuring Jetspeed 2 security SPI. All the SPI configuration files are located under ${jetspeed-source-home}/portal/src/webapp/WEB-INF/assembly/ .
2.1.      security-atn.xml
This configuration file provides the login module configuration. Not everyone needs this, as some application may decide to use another login module other than the one provided.
2.2.      security-atz.xml
This configuration file configures the authorization policy, in J2's case RdbmsPolicy .
2.3.      security-managers.xml
This configuration file configures all the managers for security purpose.
2.4.      security-providers.xml
This configuration file configures the various providers and weaves the SPI together.
· AuthenticationProviderProxy : Configures the list of AuthenticationProvider and the default authenticator.
·                                                
·                    <bean id="org.apache.jetspeed.security.AuthenticationProviderProxy"
·                       class="org.apache.jetspeed.security.impl.AuthenticationProviderProxyImpl">          
·                       <constructor-arg >
·                          <list>
·                             <ref bean="org.apache.jetspeed.security.AuthenticationProvider"/>
·                          </list>
·                       </constructor-arg>
·                      <constructor-arg><value>DefaultAuthenticator</value></constructor-arg>
·                    </bean>
                        
· AuthenticationProvider : Configures the authentication providers for the current portal implementation. The example below configures the default authenticator that uses the RDBMS to manage/store user information.
·                                                
·                    <bean id="org.apache.jetspeed.security.AuthenticationProvider"
·                                     class="org.apache.jetspeed.security.impl.AuthenticationProviderImpl">                  
·                       <constructor-arg index="0"><value>DefaultAuthenticator</value></constructor-arg>
·                       <constructor-arg index="1"><value>The default authenticator</value></constructor-arg>
·                       <constructor-arg index="2"><value>login.conf</value></constructor-arg>
·                       <constructor-arg index="3">
·                          <ref bean="org.apache.jetspeed.security.spi.CredentialHandler"/>
·                       </constructor-arg>
·                       <constructor-arg index="4">
·                          <ref bean="org.apache.jetspeed.security.spi.UserSecurityHandler"/>
·                       </constructor-arg>
·                    </bean>
                       
· AuthorizationProvider : Configures the policies and instantiates the SecurityPolicies that are used for enforcing permissions. By default, Jetspeed 2 does not load any other security policies that may have been configured. In order to use default policies, set useDefaultPolicy to true
·                                                
·                    <bean id="org.apache.jetspeed.security.AuthorizationProvider"
·                                    class="org.apache.jetspeed.security.impl.AuthorizationProviderImpl">     
·                        <constructor-arg index="0">
·                            <ref bean="org.apache.jetspeed.security.impl.RdbmsPolicy"/>
·                        </constructor-arg>
·                        <!-- Does not use the default policy as a default behavior -->
·                        <constructor-arg index="1"><value>false</value></constructor-arg>  
·                    </bean>
                       
2.5.      security-spi.xml
This configuration file contains configuration that are common to the authentication and authorization SPIs.
Bean
Description
org.apache.jetspeed.security.spi.SecurityAccess
Used internally by the default OJB based SPI. Provide access to common action/methods for the various SPI implementations. The SecurityAccess bean is used by both the Authentication and Authorization SPIs.
2.6.      security-spi-atn.xml
This configuration file contains all the configurations for configuring the authentication SPI.
Bean
Description
org.apache.jetspeed.security.spi.CredentialHandler
The CredentialHandler encapsulates the operations involving manipulation of credentials. The default implementation provides support for password protection as defined by the PasswordCredentialProvider ; as well as lifecycle management of credentials through InternalPasswordCredentialInterceptor which can be configured to manages parameters such as maximum number of authentication failures, maximum life span of a credential in days and how much history to retain for a given credential.
org.apache.jetspeed.security.spi.UserSecurityHandler
The UserSecurityHandler encapuslated all the operations around the user principals.
The following simple CredentialHandler configuration is currently provided by default with Jetspeed:
<!-- require a non-empty password -->
<bean id="org.apache.jetspeed.security.spi.CredentialPasswordValidator"
     class="org.apache.jetspeed.security.spi.impl.DefaultCredentialPasswordValidator"/>
 
<!-- MessageDigest encode passwords using SHA-1 -->
<bean id="org.apache.jetspeed.security.spi.CredentialPasswordEncoder"
     class="org.apache.jetspeed.security.spi.impl.MessageDigestCredentialPasswordEncoder">
     <constructor-arg index="0"><value>SHA-1</value></constructor-arg>      
</bean>      
 
<!-- allow multiple InternalPasswordCredentialInterceptors to be used for DefaultCredentialHandler -->
<bean id="org.apache.jetspeed.security.spi.InternalPasswordCredentialInterceptor"
     class="org.apache.jetspeed.security.spi.impl.InternalPasswordCredentialInterceptorsProxy">
     <constructor-arg index="0">
       <list>
         <!-- enforce an invalid preset password value in the persisent store is required to be changed -->
         <bean class="org.apache.jetspeed.security.spi.impl.ValidatePasswordOnLoadInterceptor"/>
 
         <!-- ensure preset cleartext passwords in the persistent store will be encoded on first use -->
         <bean class="org.apache.jetspeed.security.spi.impl.EncodePasswordOnFirstLoadInterceptor"/>
       </list>
     </constructor-arg>
</bean>
 
<bean id="org.apache.jetspeed.security.spi.PasswordCredentialProvider"
     class="org.apache.jetspeed.security.spi.impl.DefaultPasswordCredentialProvider">
     <constructor-arg index="0">
       <ref bean="org.apache.jetspeed.security.spi.CredentialPasswordValidator"/>
     </constructor-arg>      
     <constructor-arg index="1">
       <ref bean="org.apache.jetspeed.security.spi.CredentialPasswordEncoder"/>
     </constructor-arg>      
</bean>      
 
<bean id="org.apache.jetspeed.security.spi.CredentialHandler"
     class="org.apache.jetspeed.security.spi.impl.DefaultCredentialHandler">      
     <constructor-arg index="0">
       <ref bean="org.apache.jetspeed.security.spi.SecurityAccess"/>
     </constructor-arg>      
     <constructor-arg index="1">
       <ref bean="org.apache.jetspeed.security.spi.PasswordCredentialProvider"/>
     </constructor-arg>      
     <constructor-arg index="2">
       <ref bean="org.apache.jetspeed.security.spi.InternalPasswordCredentialInterceptor"/>
     </constructor-arg>
</bean>
                 
The above configuration requires not much more than that a password should not be empty and MessageDigest encode it using SHA-1.
Before the 2.0-M4 release, Jetspeed came configured with a much stricter configuration, but for first time users of the Portal this was a bit overwelming and also quite difficult to configure differently.
With the 2.0-M4 release, the previously provided, and rather complex, InternalPasswordCredentialInterceptor implementations are split up in single atomic interceptors which can much easier be configured indepedently.
An overview of the new interceptors and how related request processing pipeline valves can be configured to provide feedback to the user is provided in the Credentials Management document.
Since the "old" (pre 2.0-M4) interceptors are no longer provided with Jetspeed, the example below shows how to "restore" the old setup using the new interceptors:
<!-- require a password of minimum length 6 and at least two numeric characters -->
<bean id="org.apache.jetspeed.security.spi.CredentialPasswordValidator"
     class="org.apache.jetspeed.security.spi.impl.SimpleCredentialPasswordValidator">
     <constructor-arg index="0"><value>6</value></constructor-arg>      
     <constructor-arg index="1"><value>2</value></constructor-arg>      
</bean>
 
<!-- allow multiple InternalPasswordCredentialInterceptors to be used for DefaultCredentialHandler -->
<bean id="org.apache.jetspeed.security.spi.InternalPasswordCredentialInterceptor"
     class="org.apache.jetspeed.security.spi.impl.InternalPasswordCredentialInterceptorsProxy">
     <constructor-arg index="0">
       <list>
         <!-- enforce an invalid preset password value in the persisent store is required to be changed -->
         <bean class="org.apache.jetspeed.security.spi.impl.ValidatePasswordOnLoadInterceptor"/>
 
         <!-- ensure preset cleartext passwords in the persistent store will be encoded on first use -->
         <bean class="org.apache.jetspeed.security.spi.impl.EncodePasswordOnFirstLoadInterceptor"/>
 
         <!-- remember the last 3 passwords used and require a new password to be different from those -->
         <bean class="org.apache.jetspeed.security.spi.impl.PasswordHistoryInterceptor">
           <constructor-arg index="0"><value>3</value></constructor-arg>      
         </bean>
 
         <!-- Automatically expire a password after 60 days -->
         <bean class="org.apache.jetspeed.security.spi.impl.PasswordExpirationInterceptor">
           <constructor-arg index="0"><value>60</value></constructor-arg>      
         </bean>
 
         <!-- Automatically disable a password after 3 invalid authentication attempts in a row -->
         <bean class="org.apache.jetspeed.security.spi.impl.MaxPasswordAuthenticationFailuresInterceptor">
           <constructor-arg index="0"><value>3</value></constructor-arg>      
         </bean>
       </list>
     </constructor-arg>
</bean>
                 
And, make sure something like the following configuration is set for the security related valves in pipelines.xml:
<bean id="passwordCredentialValve"
      class="org.apache.jetspeed.security.impl.PasswordCredentialValveImpl"
      init-method="initialize">
 <constructor-arg>
   <!-- expirationWarningDays -->
   <list>
     <value>2</value>
     <value>3</value>
     <value>7</value>
   </list>
 </constructor-arg>
</bean>
 
<bean id="loginValidationValve"
      class="org.apache.jetspeed.security.impl.LoginValidationValveImpl"
      init-method="initialize">
 <!-- maxNumberOfAuthenticationFailures
       This value should be in sync with the value for
       org.apache.jetspeed.security.spi.impl.MaxPasswordAuthenticationFailuresInterceptor
       (if used) to make sense.
       Any value < 2 will suppress the LoginConststants.ERROR_FINAL_LOGIN_ATTEMPT
       error code when only one last attempt is possible before the credential
       will be disabled after the next authentication failure.
 -->
 <constructor-arg index="0"><value>3</value></constructor-arg> 
</bean>
                 
Also, make sure the above valves are configured in the jetspeed-pipeline bean.
See the User Interaction section in the Credentials Management document for a description of these valves and their relation to the interceptors configuration.
2.7.      security-spi-atz.xml
This configuration file contains all the configurations for configuring the authorization SPI.
Bean
Description
org.apache.jetspeed.security.spi.RoleSecurityHandler
The RoleSecurityHandler encapsulates all the operations around the role principals.
org.apache.jetspeed.security.spi.GroupSecurityHandler
The GroupSecurityHandler encapsulates all the operations around the group principals.
org.apache.jetspeed.security.spi.SecurityMappingHandler
The SecurityMappingHandler encapsulates all the operations involving mapping between principals. It contains the logic managing hierarchy resolution for hierarchical principals (roles or groups). The default hierarchy resolution provided is a hierarchy by generalization (see overview for definitions). A contructor-arg can be added to the SecurityMappingHandler to change the hierarchy resolution strategy. Jetspeed 2 also support a hierarchy resolution by aggregation.
A sample SecurityMappingHandler configuration could be:
<!-- Security SPI: SecurityMappingHandler -->
<bean id="org.apache.jetspeed.security.spi.SecurityMappingHandler"
     class="org.apache.jetspeed.security.spi.impl.DefaultSecurityMappingHandler">         
   <constructor-arg >
      <ref bean="org.apache.jetspeed.security.spi.SecurityAccess"/>
   </constructor-arg>
   <!-- Default role hierarchy strategy is by generalization. 
        Add contructor-arg to change the strategy. -->
   <!-- Default group hierarchy strategy is by generalization. 
        Add contructor-arg to change the strategy. -->
</bean>
                   
2.8.      结论和分析
配置文件
说明
分析
security-atn.xml
login module 配置文件
具体可参考:
提供了一个接口,可以实现不同的登陆模块,实现不同的登陆认证过程
此时在jetspeed2-security-{version}.jar中包含配置文件login.conf,其内容为:
Jetspeed {
org.apache.jetspeed.security.impl.DefaultLoginModule equired;
};
In order to override this configuration, you can place your own login.conf file in your web application class path under WEB-INF/classes. The location of the login.conf file is configured in the security-providers.xml as described below.
security-atz.xml
authorization policy 配置文件
JAAS认证策略的配置
security-managers.xml
UserManager GroupManager RoleManager PermissionManager 配置文件
配置四个对象的关系管理实现
security-providers.xml
AuthenticationProvider AuthenticationProviderProxy SecurityProvider AuthorizationProvider 授权认证提供者配置文件
 
说明:
 
3. 分析
3.1.      登陆认证过程分析
3.1.1.         相关配置
主要参考security-*.xml等几个安全相关的配置文件,尤其关注security-providers.xml,里面存在如下设置:
<!-- Security: Default Authentication Provider -->
 <bean id="org.apache.jetspeed.security.AuthenticationProvider"
         class="org.apache.jetspeed.security.impl.AuthenticationProviderImpl"
 >          
         <constructor-arg index="0"><value>DefaultAuthenticator</value></constructor-arg>
         <constructor-arg index="1"><value>The default authenticator</value></constructor-arg>
         <constructor-arg index="2"><value>login.conf</value></constructor-arg>
         <constructor-arg index="3"><ref bean="org.apache.jetspeed.security.spi.CredentialHandler"/></constructor-arg>
         <constructor-arg index="4"><ref bean="org.apache.jetspeed.security.spi.UserSecurityHandler"/></constructor-arg>
 </bean>
这里设置了提供的默认认证方式,此时:
DefaultAuthenticator——第一个参数是认证方式的名称,意义不大;
The default authenticator——第二个参数是认证方式的描述,意义不大;
login.conf——第三个参数是认证配置文件的路径,非常关键,这个文件可以在jetspeed-security-2.0.jar中找到,此时的配置为:
Jetspeed {
   org.apache.jetspeed.security.impl.DefaultLoginModule required;
};
表示配置了一个realm,名称为Jetspeed,实现类为org.apache.jetspeed.security.impl.DefaultLoginModule。此时回顾web.xml中的如下描述:
<!-- Login configuration uses form-based authentication -->
 <login-config>
    <auth-method>FORM</auth-method>
    <realm-name>Jetspeed</realm-name>
    <form-login-config>
      <form-login-page>/login/login</form-login-page>
      <form-error-page>/login/error</form-error-page>
    </form-login-config>
 </login-config>
此时使用的realm就是Jetspeed,关联起来了吧。
第三、第四个参数是回调
3.1.2.         调用过程
1、  * LoginServlet.java(doGet):触发登陆的submit;
2、  进入servlet container中触发FormAuthenticator.authenticate认证(请看配置设置:<auth-method>FORM</auth-method>);
3、  * org.apache.jetspeed.security.impl.DefaultLoginModule.java:根据web.xml配置的realm-name(Jetspeed)确定认证模块(login module),并调用login()方法,在该方法中调用顺序如下:
a)         设置回调;
b)        调用 org.apache.jetspeed.security.impl.UserManagerImp .java authenticate(this.username, password) 进行认证,继续跟进该方法:
                                       i.              除非当前用户是匿名用户,否则调用 org.apache.jetspeed.security.impl.AuthenticationProviderProxyImpl .java authenticate(userName, password, providerName) 方法进行认证,此时该 provider 会调用其 CredentialHandler (感觉就是 DAO, 此为 org.apache.jetspeed.security.spi.impl.DefaultCredentialHandler .java )的 authenticate(userName, password) 进行真正的验证。
3.2.      数据结构分析
从数据库模型来分析:
1、  :包含了用户、角色、组的信息,都认为是PRINCIPAL(主体);SECURITY_PRINCIPAL
2、  :用户的证书,默认为密码,这样设计表明一个PRINCIPAL可以有多个CREDENTIAL;SECURITY_CREDENTIAL
3、  :基于JAAS的权限的定义,目前分为FOLDER、PAGE、PORTLET等类型(可以扩展吗?)SECURITY_PERMISSION
3.3.      与传统机构部门、人员、角色、组设计的分析
从目前设计来看,存在如下问题:
1、              直接放在SECURITY_PRINCIPAL,也是一个PRINCIPAL,与用户、角色类似进行处理,显然不符合实际需要;GROUP
2、              这里的用户、角色关注的是“权限”的概念,并无业务概念,显然也存在一定的需求障碍( 根据 JSR168 用户信息可以很方便的扩展,这个需要再深入了解
4. 初步方案
4.1.      改良方案
通过修订/扩展上述PDM的几个表,并通过调整相关ojb的几个XML配置文件(请参考src_security/JETSPEED-INF/ojb/security_repository.xml),可以较为轻松的完成扩展。
但我个人并不倾向这么做,原因是:
1、  我们不熟悉OJB;
2、  我们并不打算在j2-admin中完善该管理过程——工作量不小,意义却不大;
3、  我们已经有比较好的机构用户管理模块,比如Ioa5中的实现。
4.2.      改革方案:与UUM的结合
从理论上说,这是可行的:
1、              可以通过实现GroupManager、UserManager、RoleManager接口,替换/扩展现有的几个默认实现(org.apache.jetspeed.security.impl.*ManagerImpl),达到控制几个对象的管理;
2、              可以通过替换/扩展现有的几个默认SPI实现(具体请参考org.apache.jetspeed.security.spi下的CredentialHandler、UserSecurityHandler、RoleSecurityHandler、GroupSecurityHandler等),达到DAO的效果,操作包括RDBMS/LDAP的数据访问和存取
5. 附件
5.1.      Login Module Implementation
The DefaultLoginModule implementation is illustrated by the class diagram below:
 
The roles of the classes used to implement the DefaultLoginModule are:
Class
Description
org.apache.jetspeed.security.impl.DefaultLoginModule
The javax.security.auth.spi.LoginModule implementation. The DefaultLoginModule authentication decision is encapsulated behind the UserManager interface which leverages the SPI implementation to decide which authenticator should be used in order to authenticate a user against a specific system of record. For more information on how to implement your own authenticator, see the authentication SPI documentation.
org.apache.jetspeed.security.LoginModuleProxy
A utility component used to expose the UserManager to the DefaultLoginModule .
org.apache.jetspeed.security.User
The User is an interface that holds the javax.security.auth.Subject and his/her java.util.prefs.Preferences . The UserManager upon user authentication populates the user subject with all user java.security.Principal . Jetspeed 2 implements 3 types of principals:
·   UserPrincipal: The principal holding the user unique identifier for the application.
·   RolePrincipal: The principal representing a role for the system.
·   GroupPrincipal: The principal representing a group for the system.
org.apache.jetspeed.security.UserManager
The interface exposing all user operations. This interfaces fronts the aggregates various SPI to provide developers with the ability to map users to their specific system of record.
 
【嵌入式系统】基于C语言的策略模式设计:算法家族封装与统一接口调用实现 内容概要:本文详细介绍了如何在C语言中实现设计模式中的策略模式,通过函数指针和结构体的方式模拟面向对象的多态特性,将不同的算法封装成独立的策略,使算法可以自由切换且与使用算法的客户端解耦。文中通过具体代码示例展示了策略模式的核心思想,包括定义统一的接口、实现不同策略以及动态选择策略的过程,帮助读者理解其在实际编程中的应用。; 适合人群:熟悉C语言基础,具备一定编程经验,希望深入理解设计模式在非面向对象语言中应用的开发者;尤其适合嵌入式、系统级编程人员。; 使用场景及目标:①解决程序中大量if-else或switch-case导致的代码臃肿问题;②提升代码可扩展性和维护性,实现算法与业务逻辑分离;③学习如何在C语言中模拟面向对象的关键特性如多态与封装; 阅读建议:建议结合代码实例动手实践,理解函数指针与结构体结合的设计思路,并尝试将其应用于实际项目中以加深理解。 立即下载

相关推荐

SSP-354-Jetta2006-捷达2006版自学手册

内容概要:本文档为大众捷达2006款的自学手册,全面介绍了该车型的设计、技术参数及各项系统配置。捷达2006在安全性、舒适性、操控性和空间布局方面均表现出色,采用高强度车身结构与激光焊接技术提升刚性,并配备先进的主被动安全系统,如多气囊、ESP MK60、ISOFIX接口等。车辆提供多种发动机选择,涵盖1.6L至2.0L汽油及柴油动力,部分搭载涡轮增压与直喷技术,满足EU4排放标准。传动系统包括手动、自动及DSG双离合变速箱。内饰设计注重实用性,拥有丰富的储物空间和可选装的Climatronic双区空调、电动座椅等功能。电子架构采用多总线网络系统,集成动力、舒适、信息娱乐等多个控制单元,支持诊断通信与智能功能扩展。; 适合人群:汽车维修技术人员、汽车工程专业学生以及对大众捷达2006款车型结构和技术细节感兴趣的车主或爱好者。; 使用场景及目标:①用于深入理解捷达2006的整车构造与各子系统工作原理;②作为维修、保养和故障诊断的技术参考资料;③辅助进行汽车电子系统学习与实操培训; 阅读建议:本手册内容专业性强,建议结合实物车辆或相关教学设备对照学习,重点关注各系统的结构图示、技术参数表及控制网络拓扑,以便更好地掌握整车技术细节。

JetSpeed2.0 概述

Jetspeed2.0最终release版本发布于2005年12月, 可以从以下网址下载源代码和捆绑tomcat的压缩文件: http://www.apache.org/dist/portals/jetspeed-2/   。 与Jetspeed1.x比较,Jetspeed2.0 (以下简称J2)的架构发生了很大变化, J1.x使用了Turbine,在J2中Turbine不再使用,

xywlzd的专栏 1146

CAD+ËÃÊÐÐÔ¸»É¼

CAD+ËÃÊÐÐÔ¸»É¼

Apache 门户项目组介绍

 

北冥有鱼 其名为鲲 化而为鸟 其名为鹏 1196

Jetspeed2.0的安全机制

       Jetspeed2.0的安全架构为保护门户内的各种资源提供了一套广泛的安全服务。这套安全服务是完全独立于其他的门户服务,甚至可以从门户应用中抽取出来。这套机制的核心部分是依靠JAAS提供的认证,授权功能。Jetspeed2.0的安全服务是建立在一套安全模块和扩展安全模块上的,并提供了一个SPI模型。通过修改和配置特定的处理方式,使用这个SPI模型可以修改系统内部提供的一些安全服务(比

王浩的技术博客 2873

Jetspeed2学习笔记(六)(转载)

28、页面风格详解        A、“webapps/jetspeed/decorations/layout”目录下方的是页面的(皮肤)布局风格,是对总体页面风格(皮肤)的控制,而不是单个portlet的控制。如果要增加自己的样式,可以把tigris拷贝一份,再进行修改        B、布局管理器实际上也是一组portlet应用,被定义在了“/webapps/jetspeed/WEB-

zxingchao2009的专栏------用博客记录技术成长的点点滴滴 1191

Jetspeed2.0中的PSML介绍

原文出处: http://portals.apache.org/jetspeed-2/guides/guide-psml.html Page Defaults Layout Fragments Portlet Fragments Fragment Properties Portlet Preferences Folder Link Global Pag...

王浩的技术博客 397

Struts Portlet创建

1.生成定义portlet在 /ext/ext-web/WEB_INF/portlet-ext.xml    主要配置         bookPortlet 名字为唯一标识         bookPortlet  必须唯一 可于名字相同         com.liferay.portlet.StrutsPortlet     固定为StrutsPortlet         

q1057589665的专栏 488

jboss安全配置

通过以下设置可以对JMX-console,与web-console开启密码保护一、JMX-cosole安全配置 1: 找到%JBOSS_HOME%/server/default/deploy/jmx-console.war/WEB-INF/jboss-web.xml文件,去掉对下面这段xml文本的注释。 Xml代码  &lt;jboss-web&gt;   &lt;security-doma...

qingfengxia2013的专栏 183

Jetspeed2学习笔记(五)

 19、Jetspeed应用框架详解:   jetspeed使用spring来作为它的缺省组件框架,但是,jetspeed的体系架构使得它可以很容易替换其组件管理框架,其控制是在JetspeedServlet中,其类图如下:在JetspeedServlet初始化启动时,在其init()方法中,有如下调用引擎的代码:

恒远之河的专栏 2816

【物联网开发】基于DevEco与MQTT的北向应用快速开发:华为云IoTDA平台设备监护系统设计

内容概要:本文介绍了基于华为云IoTDA平台的北向模拟环境监护快速应用开发全流程,涵盖从开发环境搭建、北向应用开发、产品与设备模型构建,到数据采集控制、命令下发及南北向系统联调的完整实践。通过DevEco Studio进行前端界面开发,利用MQTT.fx模拟设备通信,结合ArkTS语言实现认证鉴权、设备列表展示、设备详情查看等功能,并通过HTTP接口与IoTDA平台交互实现设备管理、数据查询与命令下发。同时,文档还涉及南向硬件HiSpark开发板的应用编译与烧录流程,形成端到边到云的闭环开发示范。 适合人群:具备一定前端开发基础和物联网基础知识,熟悉TypeScript或类Web开发框架,从事物联网应用开发1-3年的研发人员。 使用场景及目标:①快速构建面向华为云IoTDA平台的北向监控类应用原型;②掌握设备接入、数据上报、指令下发等核心业务流程的实现方法;③实现前后端分离架构下的设备可视化管理与远程控制功能。 阅读建议:建议结合华为云IoTDA控制台实际操作,同步搭建DevEco Studio与MQTT.fx环境,逐步实现文档中的各模块功能,重点关注HTTP请求封装、路由跳转、状态管理与JSON数据解析等关键代码实现。

技术转移机构如何提升科技成果转化效率?.docx

技术转移机构如何提升科技成果转化效率?

北向模拟环境监护快速应用开发

华为云,DevEcoStudio,MQTT,IoTDA

X035-基于Django的茶叶数据分析及可视化系统的设计与实现

本项目是一套基于Java的租借学习资料与上传视频系统的设计与实现,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的Java学习者。也可作为课程设计、期末大作业 包含:源码+数据库+论文等,该项目可以直接作为毕设使用。

2026 年高教社杯全国大学生数学建模竞赛C 题 微网与外部电网电力调控策略(数学建模,代码,论文免费分享)

内容概要:本文基于某互联网公司2025年约142万元的SEM广告投放数据,构建了“诊断—分类—优化—鲁棒决策”四层次建模框架,系统性提升广告投放效益。研究从广告创意、关键词管理、出价与预算、投放时间四个维度开展策略合理性诊断,揭示了工作日效益高、节假日期效波动剧烈等时间规律,并识别出预算过度集中于少数方案的结构性风险。针对关键词,提出基于成本与效益的二维归一化分类法,结合中位数分割与K-means聚类,将关键词科学划分为黄金词、重点词、潜力词、问题词和无效词五类。为实现效益最大化,建立以注册量为目标、受日预算与总预算约束的0-1整数规划模型,采用“贪心选词+拉格朗日对偶定价”的两阶段算法求解,显著降低单位注册成本,优化预算结构并提升展位质量。进一步引入CVaR鲁棒优化框架,对竞价、展现、点击、转化等环节的不确定性进行建模,生成更具风险抵御能力的投放策略,实证表明优化后单位注册成本下降约两成,黄金词预算占比大幅提升,无效词被完全剔除,整体投放效能显著增强。; 适合人群:具备数据分析与建模基础,从事数字营销、运筹优化或相关领域研究的学生、研究人员及从业者。; 使用场景及目标:①学习如何系统性诊断广告投放效果并识别关键影响因素;②掌握基于数据驱动的关键词价值分类方法与多阶段优化求解技术;③理解并应用鲁棒优化思想处理营销决策中的不确定性问题。; 阅读建议:此资源不仅提供了完整的建模流程与算法实现,还包含详实的实证分析与策略对比,建议读者结合文中模型推导、算法步骤与结果解读进行深入学习,并尝试复现相关计算过程以加深理解。

上一篇: Jetspeed资料汇总
下一篇: SQL Profiler + P6Spy 完全配置手册
itstarting
博客等级 码龄25年 2粉丝 18原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值