1 / 41

轻松用于嵌入式设备的中间件

以下内容旨在概述产品的总体发展方向 。 该内容仅供参考,不可纳入任何合同 。 该内容不构成提供任何材料、代码或功能的承诺,并且不应该作为制定购买决策的依据 。 此处所述有关 Oracle 产品的任何特性或功能的开发、发布以及相应的日程安排均由 Oracle 自行决定 。. 轻松用于嵌入式设备的中间件. Stephen Chin (@steveonjava) Java 技术大使 JavaOne 大会内容主席. 议题. Oracle Java Embedded Suite 的组件 针对 Java Embedded Suite 开发应用程序 代码示例 演示.

Download Presentation

轻松用于嵌入式设备的中间件

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 以下内容旨在概述产品的总体发展方向。该内容仅供参考,不可纳入任何合同。该内容不构成提供任何材料、代码或功能的承诺,并且不应该作为制定购买决策的依据。此处所述有关 Oracle 产品的任何特性或功能的开发、发布以及相应的日程安排均由 Oracle 自行决定。

  2. 轻松用于嵌入式设备的中间件 Stephen Chin (@steveonjava) Java 技术大使 JavaOne 大会内容主席

  3. 议题 • Oracle Java Embedded Suite 的组件 • 针对 Java Embedded Suite 开发应用程序 • 代码示例 • 演示

  4. Oracle Java Embedded Suite • 将 Java EE 技术引入嵌入式网关设备 • 轻松创建和托管 Web 应用程序和服务 • Java 运行时和中间件 • Java SE Embedded • 适用于 Embedded Suite 的 GlassFish • Java DB • Jersey • 提供全面的集成、测试和支持 • ARM Linux 和 x86 Linux

  5. 部署架构示例

  6. Java SE Embedded • 有/无图形界面的Java SE配置 • 针对嵌入式应用进行了优化 • 熟悉的 Java SE 7 API 集 • 使用自己喜欢的 IDE 和库 • 初始版本中包含 7u6 JRE • 客户端 JIT • 针对 x86 和 ARM V6/V7 进行了优化

  7. 适用于 Embedded Suite 的 GlassFish • 应用服务器 • 针对在嵌入式设备中使用而减少了大小 • 在嵌入式模式下运行(即在进程中) • 使用嵌入式 GlassFish API 控制 • HTTP 服务器 • Servlet 3.0 容器 • Java DB 和 Jersey 集成

  8. Java DB • 功能齐全的多用户 RDBMS,包括崩溃恢复 • 易于使用 - 无需 DBA • 基于标准(ANSI/ISO SQL 和 JDBC) • Apache Derby 项目 • 活跃的开发人员和用户社区 • 成熟的代码库(超过 15 年的实战经验)

  9. Java DB - 易于使用 • 单个 jar • 熟悉而广泛的 SQL 支持 • 自调优 • 优化器统计信息、页面大小和锁定默认值 • 许多特性均可插拔 • 加密、身份验证、函数、过程、数据类型…… • 使用嵌入式 JDBC 数据源

  10. Java DB 专题讲座 • 专题讲座 ID:CON6684 专题讲座标题:嵌入式中间件的数据存储 讲座地点/场地:Hotel Nikko - Monterey I/II 日期和时间:星期四 14:00

  11. Jersey • REST 式 Web 服务框架 • JSR-311 (JAX-RS) 参考实现 • 基于批注 • 使实现 REST 式 Web 服务变得容易 • 包括 JSON 支持 • 另外还提供 REST 客户端 API

  12. JES 应用程序 主要 应用程序 静态 内容 Web 应用程序/服务 Jersey JavaDB GlassFish Java SE Embedded

  13. Hello Jersey // The Java class will be hosted at the URI path "/helloworld"    @Path("/helloworld")    public class HelloWorldResource { // The method will process HTTP GET requests    @GET // The method will produce content encoded as MIME type "text/plain"   @Produces("text/plain") public String getClichedMessage() {   return "Hello World"; }   }

  14. 嵌入式 GlassFish API • 生命周期操作 — 启动和停止应用服务器 • 部署和取消部署应用程序 • 运行时配置 • 访问服务

  15. 嵌入式 GlassFish API 示例 GlassFishRuntimegfRuntime = GlassFishRuntime.bootstrap(); GlassFishPropertiesgfProps = new GlassFishProperties(); gfProps.setPort("http-listener", port); gfProps.setPort("https-listener", port + 1); GlassFishglassfish = gfRuntime.newGlassFish(gfProps); glassfish.start(); Deployerdeployer = glassfish.getDeployer();

  16. 保护设备 • 免责声明:这不是完整的安全教程 • 您应当了解如何保护 Linux 安装 • 移除不需要的服务 • 只打开需要的端口 • 审核文件权限 • … • 我们来谈谈如何确保安全访问 Web 应用程序

  17. GlassFish 安全性 • 在概念上,与“Big GlassFish”的配置相同 • 无管理控制台 • 因此没有开放的端口 • 使用嵌入式 API 进行配置 • 除非您自行配置,不应留有任何 HTTP & HTTPS 监听器 • 启动嵌入式 GlassFish 实例时使用属性

  18. 配置安全传输 • 可能需要使用 HTTPS • HTTP 随后将重定向至 HTTPS • 将 <transport-guarantee> 添加到 web.xml 中 • 或 • 对 servlet 使用 @ServletSecurity • 对 Jersey 使用 @Context 批注和 SecurityContext.isSecure()

  19. 配置安全传输 (2) <security-constraint> <web-resource-collection> <web-resource-name>Admin Pages</web-resource-name> <url-pattern>/admin/*</url-pattern> </web-resource-collection> <user-data-constraint> <description/> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint>

  20. 限制对 Web 应用程序的访问 • GlassFish 可通过以下方式对用户进行身份验证: • 用户名和口令 • 证书 • 上述两项组合 • 身份验证领域 - 文件、证书、JDBC、LDAP • 可以为以下各项创建自定义领域和 LoginModule • 其他身份验证机制 • 其他安全性措施,如每用户口令 Salt

  21. 使用 JDBC 领域 • 创建 JDBC 领域 • 指定使用 JDBC 领域 • 将角色与组关联,并指定角色约束 • 定义用户数据库模式 • 填充用户数据库 • 指定访问约束 • 编写自定义 LoginModule?

  22. 创建 JDBC 资源 • 通常使用GlassFish管理控制台执行此操作 • 或使用asadmin命令 • 可通过CommandRunner API 运行asadmin命令 CommandRunner runner = glassfish.getCommandRunner(); CommandResult result; result = runner.run("create-jdbc-resource”, "--connectionpoolid=DerbyPool”, "jdbc/derby");

  23. 创建 JDBC 领域 result = runner.run("create-auth-realm”, ”--classname=com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm", "--property=jaas-context=jdbcRealm: encoding=Hex: password-column=PASSWORD: datasource-jndi=jdbc/__default: group-table=users_groups: user-table=users: group-name-column=GROUPID: digest-algorithm=MD5: user-name-column=USERID”, "MyJDBCRealm");

  24. 指定使用 JDBC 领域 • 在 web.xml 中,添加 <login-config> <auth-method>BASIC</auth-method> <realm-name>MyJDBCRealm</realm-name> </login-config>

  25. 将角色与组关联 • 在 sun-web.xml 中,添加 <security-role-mapping> <role-name>admin</role-name> <group-name>admin</group-name> </security-role-mapping>

  26. 指定角色约束 • 在 web.xml 中,添加 <security-role> <role-name>admin</role-name> </security-role>

  27. 指定角色约束 (2) • 在 web.xml 中,添加 <security-constraint> … <auth-constraint> <role-name> admin </role-name> </auth-constraint> </security-constraint>

  28. 配置角色约束 <security-constraint> <web-resource-collection> <web-resource-name>Admin Pages</web-resource-name> <url-pattern>/admin/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>admin</role-name> </auth-constraint> </security-constraint>

  29. 定义用户数据库模式 Statement s = connection.createStatement(); s.execute("CREATE TABLE users" + ”(USERID varchar(50) NOT NULL, PASSWORD varchar(128) NOT NULL)”); s.execute("CREATE TABLE groups" + ”(GROUPID varchar(20) NOT NULL)"); s.execute("CREATE TABLE users_groups" + ”(GROUPID varchar(20) NOT NULL, USERID varchar(50) NOT NULL”)");

  30. 填充用户数据库 s.execute(“INSERT INTO users(USERID,PASSWORD) VALUES(‘user’,’…’)”); s.execute("INSERT INTO users(USERID,PASSWORD) VALUES ('user', ‘…’)”); s.execute("INSERT INTO groups(GROUPID) VALUES ('admin')"); s.execute("INSERT INTO groups(GROUPID) VALUES ('users')"); s.execute("INSERT INTO users_groups(USERID,GROUPID) VALUES ('adminuser', 'users')"); s.execute("INSERT INTO users_groups(USERID,GROUPID) VALUES ('adminuser', 'admin')"); s.execute("INSERT INTO users_groups(USERID,GROUPID) VALUES ('user', 'users')");

  31. 结果

  32. 在设备中包含 JES • 只需将 JES 目录放置在设备上的任意所需位置 • 无需安装过程 • 嵌入式 GlassFish 将创建一个框架工作树 • 默认在 /tmp 下 • 您的应用程序可能需要“冷启动” • 初始化凭证存储 • 将预初始化的数据库复制到所需位置 • ……

  33. 准备好开始了吗? 直接访问以下网址进行下载: http://www.oracle.com/technetwork/java/embedded/downloads/java-embedded-suite/index.html

  34. 更多信息

  35. Graphic Section Divider

  36. 应用程序打包 • Web 应用程序和服务打包为 war 文件 • Jar 文件和其他应用程序描述文件 • WEB-INF/web.xml • WEB-INF/sun-web.xml

  37. 访问受保护的资源 GlassFish 容器 请求资源 Web 浏览器 请求凭证 检查 凭证 发送凭证 Web 应用程序 返回资源 用户 信息

  38. Web 服务安全性 • javax.ws.rs.core.SecurityContext • 获取关于连接和用户的信息 • 使用 @Context 标注注入此信息 @Context SecurityContext security; String username = security.getUserPrincipal().getName(); if (security.userInRole(“admin”)) { … }

  39. 使用 Netbeans 开发 • 自动下载和执行应用程序 • 使用Netbeans提供的 <scp> 和 <sshexec> Ant 规则 • 更新 build.xml 中的 <run> 目标

More Related