- 浏览: 1053259 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (279)
- Apache net (10)
- JBoss Rules (3)
- Seam ACL (1)
- Seam (14)
- Seam JPA高级权限验证 (8)
- 待解决的问题.... (1)
- JAVA (43)
- Dwr (4)
- Ajax4JSF (1)
- JavaScript (27)
- 生活小常识 (17)
- Richfaces (3)
- seam自己经历 (14)
- JDBC (1)
- mysql (6)
- WebService (10)
- Java Web (4)
- Hibernate (13)
- J2EE框架整合 (3)
- Spring (9)
- BEA Weblogic (1)
- XML (1)
- log4j (6)
- CSS (2)
- javaIO文件的读写 (5)
- SVN服务器的安装 (5)
- powerDesigner (2)
- SQL常用语句 (3)
- wicket初学 (5)
- eclipse (7)
- 正则表达式 (1)
- ExtJS (6)
- maven(m2eclipse) (1)
- struts2.0 (9)
- JPA (6)
- struts2.0整合spring2.5 (9)
- linux (6)
- Oracle (5)
- Servlet (3)
- MyEclipseGen (0)
最新评论
-
qq_31247573:
JAVA 获取http返回XML的数据 -
jasmine_20100810:
...
linux下tomcat服务的启动、关闭与错误跟踪 -
weiaiFang0624:
视频下载地址:http://download.csdn.net ...
there is no action mapped for namespace / and action name解决办法 -
p476462534:
JS控制表单form的提交 -
dandongsoft:
aaaaaaaaaaaaaaa
httpClient,JAVA访问http request response
Seam安全升级
by Shane Bryzak,翻译:JSF中文技术文摘
Article permalink: http://shane.bryzak.com/articles/seam_security_gets_an_upgrade
即将到来的 JBoss Seam 2.1.0.GA 发布版本将包含一些新的功能和增强的安全特性,这些安全特性包括 Identity Management, 基于ACL的权限, 和 Permission Management, 还
有强类型(strongly-typed)的安全注解。在这篇文章中,我将结合在SeamSpace示例(在Seam发布包的/examples/seamspace目录下)来讲解下这些新的安全特性。
如果你想自己来运行下SeamSpace示例程序,下面有些建议来指导你如何做:
1) 首先,确保你安装了JDK 1.5,还有 Apache Ant(最近发布版本)
2) 下载并安装 JBoss AS 4.2.2, 下载地址: http://www.jboss.org/jbossas/downloads/
3) 下载并且解压缩Seam的2.1每日建构版本,下载地址: http://www.seamframework.cn/Download (如果你具有探索精神,可以从SVN中检出最新版本,地址:
http://anonsvn.jboss.org/repos/seam/trunk/)
4) 编辑Seam目录中的 build.properties 文件,修改你的 JBoss AS 安装目录
5) 导航到 examples/seamspace 目录,运行 'ant'
6) 在 JBoss bin目录下运行run脚步来启动JBoss AS
7) 在 JBoss AS 启动后,打开 http://localhost:8080/seam-space
现在我们开始看看新的 Identity Management 特性。
Identity Management
那么什么是 Identity Management 呢? 直到现在,Seam只提供了使用内建的组件来做用户验证(Identity 组件)。Seam没有提供的是一个用于创建和管理实际用户帐户的API,
你可以使用这些API来验证用户信息,这留给了开发者。Identity Management通过提供这样一个API来填补了这个空白,这个API努力使用一致的方式来管理用户和角色,而不用考
虑他们存储在那里。无论他们是作为记录保存在关系数据库中还是作为实体保存在LDAP目录中,Identity Management都在Seam程序中提供了统一标准的API来创建,更新,和删除
用户和角色。
刚才所说的 Identity Management API 就是 IdentityManager 组件。这个组件暴露了一些identity management的操作。为了让你更多的了解下这个特性,下面列出了一些它具有
的函数:
* createUser(String username, String password)
* deleteUser(String name)
* enableUser(String name)
* disableUser(String name)
* changePassword(String name, String password)
* isUserEnabled()
* grantRole(String name, String role)
* revokeRole(String name, String role)
* createRole(String role)
* deleteRole(String role)
* userExists(String name)
* roleExists(String name)
* listUsers()
* authenticate(String username, String password)
从上表中你可以看到,大多数的函数都和操作系统安全相关的命令同义(假设你属性unix/linux),就像:adduser,deluser 等待。
Configuring IdentityManager
IdentityManager的配置是相当简单的 -- 它需要和一个或则两个认证中心(identity stores)一起配置。一个identity store 用于所有用于相关的操作,另外一个用于角色相关
的操作。如果你的用户和角色相关信息都保存在同一个存储中心中(例如一个数据库),这样只需要一个identity store就可以了,这一个identity store用作用户和角色相关的
操作。这听起来好像有点奇怪,当处理复杂的安全需求时,这有相当大的伸缩性。 例如这样一个场景:从LDAP中验证用户,但是从一个关系数据库中载入用户的角色信息。
每个 IdentityStore 实现都知道如何与一个特别的存储中心打交道。Seam提供了两个现成的 IdentityStore 实现,JpaIdentityStore 和 LdapIdentityStore, 分别用于数据库和
基于LDAP的安全验证。如果IdentityManager没有配置identity stores,那么它就使用默认值JpaIdentityStore。我们以后在来讲解如何使用LdapIdentityStore,现在这篇文章中
我们就只关注JpaIdentityStore。
JpaIdentityStore
这个 IdentityStore 实现可以让你把用户帐户信息保存在数据库中。通过应用特定的注解到代表用户和角色的实体bean上,JpaIdentityStore可以使用这些实体来管理用户数据库
中的用户信息。
我们来看看用来保存用户帐户信息的 MemberAccount 实体 bean。 下面的代码为了排版被截断了 :
@Entity
@Table(uniqueConstraints = @UniqueConstraint(columnNames = "username"))
public class MemberAccount implements Serializable
{
// snip field and key declarations
@NotNull @UserPrincipal
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
@UserPassword(hash = "MD5")
public String getPasswordHash() { return passwordHash; }
public void setPasswordHash(String passwordHash) { this.passwordHash = passwordHash; }
@UserEnabled
public boolean isEnabled() { return enabled; }
public void setEnabled(boolean enabled) { this.enabled = enabled; }
@UserRoles
@ManyToMany(targetEntity = MemberRole.class)
@JoinTable(name = "AccountMembership",
joinColumns = @JoinColumn(name = "AccountId"),
inverseJoinColumns = @JoinColumn(name = "MemberOf"))
public Set<MemberRole> getRoles() { return roles; }
public void setRoles(Set<MemberRole> roles) { this.roles = roles; }
}
就如我们看到的,在bean的属性访问方法中有一些附加的注解,这些注解告诉 JpaIdentityStore 如何与特定的实体bean交互。我们下面来详细的看看这些注解:
* @UserPrincipal - 该注解表明该属性包含用户的主要属性(i.e. 用户名称)
* @UserPassword - 该注解表明该属性包含用户的密码。把用户密码保存为普通文本通常不是一个好的注意,因此这个注解支持使用hash算法。该算法用来产生一个用户密码
的hash值,然后会把hash值保存到数据库中。
* @UserEnabled - 这个是可选的,用户指示该用户帐户是否是启用的,默认值为启用所有的帐户。
* @UserRoles - 这个注解指示该用户所属的角色组。
这里还有一组类似的注解来配置一个用来保存角色的实体bean。还可以把角色信息和用户信息保存在同一个表中,通过鉴别器来区分,请参考Seam的文档来了解相关信息。
Alternatively, it is possible to store role records in the same table as users (which then becomes self-referencing via a one-to-many relationship to itself) by specifying one of the columns as a discriminator (determining whether the record represents a user or a role).
Using IdentityManager
我们来看看SeamSpace示例, 看看Identity management是如何工作的
从上图,SeamSpace的主页,我们可以看到一个让用户注册的'SIGN UP'链接。在注册页面用户可以输入一些帐户信息来注册,然后可以用来登陆。注册的程序使用IdentityManager
来创建新的用户帐户,然后登陆新注册的用户。看一下 RegisterAction.java 类,我们可以看到 Identity Manager 通过使用 @In 注解注入进来了:
@In
private IdentityManager identityManager;
更进一步,我们可以在uploadPicture()方法中看到新用户是如何被创建的 (在注册流程的最后调用了该方法,并且结束了当前的会话):
@End
public void uploadPicture()
{
(snip)
new RunAsOperation() {
public void execute() {
identityManager.createUser(username, password);
identityManager.grantRole(username, "user");
}
}.addRole("admin")
.run();
(snip)
// Login the user
identity.setUsername(username);
identity.setPassword(password);
identity.login();
}
RunAsOperation 使用较高的优先级来执行特别的操作。在这种情况下,创建一个新用户要求当前的用户具有管理员的权限,上面的代码通过addRole()函数暂时为RunAsOperation
操作授权。在该函数的最后我们看到该用户使用用户名和密码登陆到系统中了。
Authentication
以前,Seam安全管理在认证阶段需要调用一个'authenticator' 组件,该组件用来计算用户的角色。这个认证模型当前依然支持,同时使用IdentityManager 来认证用户更合常理
,他提供了认证功能而不用写额外的待命。请记住,要使用IdentityManager 来验证用户,只需要从components.xml文件的identity 组件配置中删除'authenticate-method'属性
就可以了:
<!-- The old way of authenticating, using an authenticator component -->
<!--security:identity authenticate-method="#{authenticator.authenticate}"/-->
<!-- The new way to authenticate, using IdentityManager (you don't actually need to
include this element, since it has no attributes now) -->
<security:identity/>
User Management Views
如果你使用管理员帐号登陆 SeamSpace (username/password: demo/demo),在顶部你会看到一个'Security' 连接. 点击这个连接可以用来管理其他的用户和角色:
点击第一个连接, 'Manage Users' 将会打开用户管理页面:
这里可以添加,修改和删除用户。点击 'new user' 按钮来创建用户, 打开一个输入用户信息的页面:
点击 save 会保存新用户,返回到用户管理界面,可以看到新创建的用户:
现在来看看角色管理, 点击'Manage Roles' 会打开角色管理页面:
我们会看到系统定义的角色。点击'new role'来创建新的角色:
可以输入角色名和指定用户组。点击save保存,然后返回的角色管理界面:
这里我们就结束了 identity management 特效的预览,下面来看看 permission management.
by Shane Bryzak,翻译:JSF中文技术文摘
Article permalink: http://shane.bryzak.com/articles/seam_security_gets_an_upgrade
即将到来的 JBoss Seam 2.1.0.GA 发布版本将包含一些新的功能和增强的安全特性,这些安全特性包括 Identity Management, 基于ACL的权限, 和 Permission Management, 还
有强类型(strongly-typed)的安全注解。在这篇文章中,我将结合在SeamSpace示例(在Seam发布包的/examples/seamspace目录下)来讲解下这些新的安全特性。
如果你想自己来运行下SeamSpace示例程序,下面有些建议来指导你如何做:
1) 首先,确保你安装了JDK 1.5,还有 Apache Ant(最近发布版本)
2) 下载并安装 JBoss AS 4.2.2, 下载地址: http://www.jboss.org/jbossas/downloads/
3) 下载并且解压缩Seam的2.1每日建构版本,下载地址: http://www.seamframework.cn/Download (如果你具有探索精神,可以从SVN中检出最新版本,地址:
http://anonsvn.jboss.org/repos/seam/trunk/)
4) 编辑Seam目录中的 build.properties 文件,修改你的 JBoss AS 安装目录
5) 导航到 examples/seamspace 目录,运行 'ant'
6) 在 JBoss bin目录下运行run脚步来启动JBoss AS
7) 在 JBoss AS 启动后,打开 http://localhost:8080/seam-space
现在我们开始看看新的 Identity Management 特性。
Identity Management
那么什么是 Identity Management 呢? 直到现在,Seam只提供了使用内建的组件来做用户验证(Identity 组件)。Seam没有提供的是一个用于创建和管理实际用户帐户的API,
你可以使用这些API来验证用户信息,这留给了开发者。Identity Management通过提供这样一个API来填补了这个空白,这个API努力使用一致的方式来管理用户和角色,而不用考
虑他们存储在那里。无论他们是作为记录保存在关系数据库中还是作为实体保存在LDAP目录中,Identity Management都在Seam程序中提供了统一标准的API来创建,更新,和删除
用户和角色。
刚才所说的 Identity Management API 就是 IdentityManager 组件。这个组件暴露了一些identity management的操作。为了让你更多的了解下这个特性,下面列出了一些它具有
的函数:
* createUser(String username, String password)
* deleteUser(String name)
* enableUser(String name)
* disableUser(String name)
* changePassword(String name, String password)
* isUserEnabled()
* grantRole(String name, String role)
* revokeRole(String name, String role)
* createRole(String role)
* deleteRole(String role)
* userExists(String name)
* roleExists(String name)
* listUsers()
* authenticate(String username, String password)
从上表中你可以看到,大多数的函数都和操作系统安全相关的命令同义(假设你属性unix/linux),就像:adduser,deluser 等待。
Configuring IdentityManager
IdentityManager的配置是相当简单的 -- 它需要和一个或则两个认证中心(identity stores)一起配置。一个identity store 用于所有用于相关的操作,另外一个用于角色相关
的操作。如果你的用户和角色相关信息都保存在同一个存储中心中(例如一个数据库),这样只需要一个identity store就可以了,这一个identity store用作用户和角色相关的
操作。这听起来好像有点奇怪,当处理复杂的安全需求时,这有相当大的伸缩性。 例如这样一个场景:从LDAP中验证用户,但是从一个关系数据库中载入用户的角色信息。
每个 IdentityStore 实现都知道如何与一个特别的存储中心打交道。Seam提供了两个现成的 IdentityStore 实现,JpaIdentityStore 和 LdapIdentityStore, 分别用于数据库和
基于LDAP的安全验证。如果IdentityManager没有配置identity stores,那么它就使用默认值JpaIdentityStore。我们以后在来讲解如何使用LdapIdentityStore,现在这篇文章中
我们就只关注JpaIdentityStore。
JpaIdentityStore
这个 IdentityStore 实现可以让你把用户帐户信息保存在数据库中。通过应用特定的注解到代表用户和角色的实体bean上,JpaIdentityStore可以使用这些实体来管理用户数据库
中的用户信息。
我们来看看用来保存用户帐户信息的 MemberAccount 实体 bean。 下面的代码为了排版被截断了 :
@Entity
@Table(uniqueConstraints = @UniqueConstraint(columnNames = "username"))
public class MemberAccount implements Serializable
{
// snip field and key declarations
@NotNull @UserPrincipal
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
@UserPassword(hash = "MD5")
public String getPasswordHash() { return passwordHash; }
public void setPasswordHash(String passwordHash) { this.passwordHash = passwordHash; }
@UserEnabled
public boolean isEnabled() { return enabled; }
public void setEnabled(boolean enabled) { this.enabled = enabled; }
@UserRoles
@ManyToMany(targetEntity = MemberRole.class)
@JoinTable(name = "AccountMembership",
joinColumns = @JoinColumn(name = "AccountId"),
inverseJoinColumns = @JoinColumn(name = "MemberOf"))
public Set<MemberRole> getRoles() { return roles; }
public void setRoles(Set<MemberRole> roles) { this.roles = roles; }
}
就如我们看到的,在bean的属性访问方法中有一些附加的注解,这些注解告诉 JpaIdentityStore 如何与特定的实体bean交互。我们下面来详细的看看这些注解:
* @UserPrincipal - 该注解表明该属性包含用户的主要属性(i.e. 用户名称)
* @UserPassword - 该注解表明该属性包含用户的密码。把用户密码保存为普通文本通常不是一个好的注意,因此这个注解支持使用hash算法。该算法用来产生一个用户密码
的hash值,然后会把hash值保存到数据库中。
* @UserEnabled - 这个是可选的,用户指示该用户帐户是否是启用的,默认值为启用所有的帐户。
* @UserRoles - 这个注解指示该用户所属的角色组。
这里还有一组类似的注解来配置一个用来保存角色的实体bean。还可以把角色信息和用户信息保存在同一个表中,通过鉴别器来区分,请参考Seam的文档来了解相关信息。
Alternatively, it is possible to store role records in the same table as users (which then becomes self-referencing via a one-to-many relationship to itself) by specifying one of the columns as a discriminator (determining whether the record represents a user or a role).
Using IdentityManager
我们来看看SeamSpace示例, 看看Identity management是如何工作的
从上图,SeamSpace的主页,我们可以看到一个让用户注册的'SIGN UP'链接。在注册页面用户可以输入一些帐户信息来注册,然后可以用来登陆。注册的程序使用IdentityManager
来创建新的用户帐户,然后登陆新注册的用户。看一下 RegisterAction.java 类,我们可以看到 Identity Manager 通过使用 @In 注解注入进来了:
@In
private IdentityManager identityManager;
更进一步,我们可以在uploadPicture()方法中看到新用户是如何被创建的 (在注册流程的最后调用了该方法,并且结束了当前的会话):
@End
public void uploadPicture()
{
(snip)
new RunAsOperation() {
public void execute() {
identityManager.createUser(username, password);
identityManager.grantRole(username, "user");
}
}.addRole("admin")
.run();
(snip)
// Login the user
identity.setUsername(username);
identity.setPassword(password);
identity.login();
}
RunAsOperation 使用较高的优先级来执行特别的操作。在这种情况下,创建一个新用户要求当前的用户具有管理员的权限,上面的代码通过addRole()函数暂时为RunAsOperation
操作授权。在该函数的最后我们看到该用户使用用户名和密码登陆到系统中了。
Authentication
以前,Seam安全管理在认证阶段需要调用一个'authenticator' 组件,该组件用来计算用户的角色。这个认证模型当前依然支持,同时使用IdentityManager 来认证用户更合常理
,他提供了认证功能而不用写额外的待命。请记住,要使用IdentityManager 来验证用户,只需要从components.xml文件的identity 组件配置中删除'authenticate-method'属性
就可以了:
<!-- The old way of authenticating, using an authenticator component -->
<!--security:identity authenticate-method="#{authenticator.authenticate}"/-->
<!-- The new way to authenticate, using IdentityManager (you don't actually need to
include this element, since it has no attributes now) -->
<security:identity/>
User Management Views
如果你使用管理员帐号登陆 SeamSpace (username/password: demo/demo),在顶部你会看到一个'Security' 连接. 点击这个连接可以用来管理其他的用户和角色:
点击第一个连接, 'Manage Users' 将会打开用户管理页面:
这里可以添加,修改和删除用户。点击 'new user' 按钮来创建用户, 打开一个输入用户信息的页面:
点击 save 会保存新用户,返回到用户管理界面,可以看到新创建的用户:
现在来看看角色管理, 点击'Manage Roles' 会打开角色管理页面:
我们会看到系统定义的角色。点击'new role'来创建新的角色:
可以输入角色名和指定用户组。点击save保存,然后返回的角色管理界面:
这里我们就结束了 identity management 特效的预览,下面来看看 permission management.
发表评论
-
JBoss Seam事件机制 (4):页面动作
2009-06-24 13:47 1671在JBoss Seam事件机制(1 ... -
JBoss Seam的事件机制 (3)
2009-06-24 13:46 1405JBoss Seam如何做到松耦合 ... -
JBoss Seam的事件机制 (2)
2009-06-24 13:45 1283JBoss Seam如何做到松耦合 ... -
JBoss Seam的事件机制 (1) 内置的上下文事件
2009-06-24 13:45 1649在JBoss Seam的事件机制(1)概述中我们提到Seam提 ... -
Seam 2.1中的安全升级 (二)
2009-06-24 13:43 1593Permission Management 尽管 Ident ... -
seam2.1权限验证(15.5)@Restrict注解 (三)
2009-06-24 13:39 141915.6.8. 权限验证的模型 ... -
seam2.1权限验证(15.5)@Restrict注解 (二)
2009-06-24 13:37 158615.6.5. 实体安全控制(Securing Entitie ... -
seam2.1权限验证(15.5)@Restrict注解 (一)
2009-06-24 13:36 234415.5. 错误消息安全API内 ... -
seam2.1权限验证(15.3) JAAS
2009-06-24 13:35 181615.3. 验证Seam安全中的验证特性是基于JAAS (Ja ... -
seam2.1权限验证(15.4) jpa-identity-store
2009-06-24 13:34 205515.4. 身份管理身份管理功能提供了一组标准的API接口,用 ... -
seam发送邮件email示例
2009-06-24 13:33 1596以下转自csdn上的一个回答,留着用的时候参考,防止到时找不到 ... -
扩展seam组件
2009-06-24 13:31 1096任何一个框架都必须拥有一个非常重要的功能:可扩展性。JBoss ... -
Seam Bean验证快速进阶II:自定义约束
2009-06-24 13:26 1393本文为Bean验证系列的第二部分。总体介绍请阅读这篇文章。本文 ...
相关推荐
在 Seam 2.1 中,最显著的变化之一就是增强了安全性方面的功能,尤其是在用户权限验证机制上。这一版本不仅提供了更为精细的权限控制选项,还增加了对最新安全标准的支持,如更严格的密码策略和会话管理机制等。 ##...
- **RESTeasy集成**:RESTeasy是由JBoss成员Bill Burke开发的一个REST实现,它也被集成到Seam 2.1中,进一步增强了框架对RESTful应用的支持。 - **RESTful应用示例**:通过集成JAX-RS和RESTeasy,Seam 2.1能够提供更...
Seam 2.1 安全模块框架是一个强大的工具,为使用 Seam 开发的应用程序提供了全面的安全管理和认证机制。框架的核心特性包括: 1. **安全验证**:Seam 提供了一个可扩展的安全验证层,基于 Java Authentication and ...
### 基于Seam2.1的最新力作《Seam Framework: Experience the Evolution of Java EE, 2nd Edition》全书知识点概览 #### 一、Seam框架简介 Seam框架是JBoss组织推出的一个开源项目,旨在简化企业级应用开发,通过...
Seam为 应 业务业业 义 种统 组 你的 用程序中所有的 定 了一 一的 件模型。 Seam组件可能是 态义 关关 态 有状 的,包含与几个定 良好的上下文中任何一个相 的状 , 包括长开间运行上 下文、持久化上下文、业务流程...
**2.1.2版本** 是Seam框架的一个重要更新,它引入了许多新特性与改进,包括但不限于更好的性能优化、增强的安全性支持以及对现代Web开发实践的支持。此外,此版本还包含了对Seam核心功能的改进,例如对页面流控制的...
### 基于Seam2.1的最新力作《Seam Framework: Experience the Evolution of Java EE, 2nd Edition》摘要分析 #### 核心概念:Seam框架概述 Seam框架是一款革命性的Web应用开发框架,它将标准的Java EE技术与一系列...
整理自jboss seam 中文站,压缩为chm格式,便于广大jboss seam爱好者阅读,所有版权归jboss seam中文站所有。
- **Seam 上下文**:介绍了 Seam 上下文的概念,它是 Seam 中的一个核心概念,用于管理应用程序的状态。 - **Statelesscontext(无状态上下文)**:不保存任何状态的上下文。 - **Eventcontext(事件上下文)**:...
3. **注入(Injection)**: Seam支持依赖注入,可以将一个组件的实例自动注入到其他组件中,无需手动创建对象或管理依赖关系。 4. **导航和流程控制(Navigation and Flow Control)**: Seam提供了强大的导航机制,...
JBoss Seam 是一个开源的应用框架,它结合了JavaServer Faces (JSF)、Java Persistence API (JPA)、Enterprise JavaBeans (EJB) 3.0 和其他Java EE组件,旨在简化企业级开发。这个文档集合包含了对Seam及其相关技术...
《Seam in Action》是一本专门探讨Seam框架的书籍,该书分为中文和英文两个版本,对于初学者和有经验的开发者来说都是一个宝贵的资源。Seam是一个强大的Java EE框架,它集成了多种技术,如JavaServer Faces (JSF)、...
- **SEAM**:SEAM 是一个基于 Java EE 的企业级应用框架,它简化了复杂的应用程序开发过程,并且提供了丰富的功能来支持业务逻辑的实现。 - **版本信息**:本文档介绍了 SEAM 2.0 GA 版本的功能特性及其使用方法。 ...
Seam Security是针对Java Web应用程序的安全框架,它是JBoss Seam项目的一部分,提供了全面的安全解决方案,包括身份验证、授权和身份管理等功能。Seam Security以易于配置和使用为特点,允许开发者快速设置应用程序...
首先,Seam框架的核心依赖于JSF,这是Java EE中的一个用户界面组件框架,用于构建交互式Web应用。JSF提供了模型-视图-控制器(MVC)架构,通过组件和事件处理机制来处理用户交互。在压缩包中,你会找到如`jsf-api....
Seam是一个革命性的Java EE应用框架,旨在通过整合现有的Java企业级技术,如EJB3、JSF、JPA和Hibernate,提供一个现代化的开发平台,消除传统Java EE开发中的复杂性。 Seam的关键特性包括: 1. **轻量级企业Java**...
#### 2.1 第一部分:起步使用Seam - **第1章:Seam统一Java EE 3**:介绍 Seam 如何整合 Java EE 3 技术,形成统一的应用开发平台。 - **第2章:将Seam-Gentoo投入工作**:展示如何在 Gentoo Linux 系统上安装和配置...
它的核心思想是找出图像中的一条或多条“能量最低”的路径(seam),沿着这些路径删除或添加像素,从而实现图像的等比例或非等比例缩放。这种方法特别适用于保留图像的主要特征,例如人物、物体等,因为它会尽可能...