设为首页 加入收藏

TOP

Java EE 8 中的新特性(二)
2017-10-29 06:07:18 】 浏览:904
Tags:Java 特性
程安全的访问点。

下面将介绍上述每个组件。

HttpAuthenticationMechanism

Java EE 已指定了两种验证 Web 应用程序用户的机制:Java Servlet 规范 3.1 (JSR-340) 指定了一种声明性的应用程序配置机制,而 JASPIC (Java Authentication Service Provider Interface for Containers) 定义了一个名为 ServerAuthModule 的 SPI,该 SPI 支持开发身份验证模块来处理任何凭证类型。

这两种机制既有意义又很有效,但从 Web 应用程序开发人员的角度讲,每种机制都存在局限性。servlet 容器机制仅支持小范围的凭证类型。JASPIC 非常强大和灵活,但使用起来也非常复杂。

Java EE Security API 希望通过一个新接口解决这些问题:HttpAuthenticationMechanism。这个新接口实际上是 JASPIC ServerAuthModule 接口的一个简化的 servlet 容器变体,它在减少现有机制的局限性的同时利用现有机制。
HttpAuthenticationMechanism 类型的实例是一个 CDI bean,可将它用于实现注入操作的容器,而且该实例被指定仅用于 servlet 容器。该规范明确排除了 EJB 和 JMS 等其他容器。

HttpAuthenticationMechanism 接口定义了 3 个方法:validateRequest()、secureResponse() 和 cleanSubject()。这些方法非常类似于 JASPIC ServerAuth 接口上声明的方法,所以开发人员应该对它们感到熟悉。唯一需要重写的方法是 validateRequest();其他所有方法都有默认实现。

IdentityStore

身份存储是一个数据库,用于存储用户身份数据,比如用户名、组成员关系,以及用于验证凭证的信息。在新的 Java EE Security API 中,使用了一个名为 IdentityStore 的身份存储抽象来与身份存储进行交互。它的用途是验证用户并检索组成员信息。

正如规范中所写,IdentityStore 的意图是供 HttpAuthenticationMechanism 实现使用,不过这不是必须的。结合使用 IdentityStore 和 HttpAuthenticationMechanism,使得应用程序能以一种便携的、标准的方式控制其身份存储。

SecurityContext

IdentityStore 和 HttpAuthenticationMechanism 相结合,成为了一个强大的新的用户身份验证工具。然而,声明性模型可能无法满足系统级安全需求。SecurityContext 可在这里派上用场:编程安全使得 Web 应用程序能执行所需的测试,从而允许或拒绝访问应用程序资源。

主要更新:Servlet 4.0、Bean Validation 2.0、CDI 2.0

Java EE 8 中主要提供了 3 个企业标准 API:Servlet 4.0 (JSR 369)、Bean Validation 2.0 (JSR 380) 和 Contexts and Dependency Injection for Java 2.0 (JSR 365)。

下面将介绍每个 API 的重要特性。

Servlet 4.0

Java Servlet API 是 Java 企业开发人员最早接触、最熟悉的 API 之一。它于 1999 年在 J2EE 1.2 中首次面世,现在在 Java Server Pages (JSP)、JavaServer Faces (JSF)、JAX-RS 和 MVC (JSR 371) 中发挥着重要作用。
Java EE 8 中对 Servlet 进行了重大修订,主要是为了适应 HTTP/2 的性能增强特性。服务器推送目前是这一领域的首要特性。

服务器推送是什么?

服务器推送通过将客户端资源推送到浏览器的缓存中来预先满足对这些资源的需求。客户端发送请求并收到服务器响应时,所需的资源已在缓存中。

PushBuilder

在 Servlet 4.0 中,服务器推送是通过一个 PushBuilder 实例公开的。清单 6 展示了一个从 HttpServletResponse 实例获取的 PushBuilder 实例,该实例被传递到一个请求处理方法。

清单 6. servlet 中的 PushBuilder

@Override
protected void doGet(HttpServletRequest request,
        HttpServletResponse response)
        throws ServletException, IOException {
 
PushBuilder pushBuilder = request.newPushBuilder();
pushBuilder.path("images/header.png").push();
pushBuilder.path("css/menu.css").push();
pushBuilder.path("js/ajax.js").push();
 
// Do some processing and return JSP that 
// requires these resources
}

在清单 6 中,header.png 的路径是通过 path() 方法在 PushBuilder 实例上设置的,并通过调用 push() 推送到客户端。该方法返回时,会清除路径和条件标头,以供构建器重用。

servlet 映射的运行时发现

Servlet 4.0 提供了一个新的 API,用它来实现 URL 映射的运行时发现。HttpServletMapping 接口的用途是让确定导致 servlet 激活的映射变得更容易。在该 API 内,会从一个 HttpServletRequest 实例获得 servlet 映射,该实例包含 4 个方法:

  • getMappingMatch() 返回匹配的类型。
  • getPattern() 返回激活 servlet 请求的 URL 模式。
  • getMatchValue() 返回匹配的 String
  • getServletName() 返回通过该请求激活的 servlet 类的完全限定名称。

清单 7. HttpServletMapping 接口上的所有 4 个方法

HttpServletMapping mapping = request.getHttpServletMapping();
String mapping = mapping.getMappingMatch().name();
String value = mapping.getMatchValue();
String pattern = mapping.getPattern();
String servletName = mapping.getServletName();

除了这些更新之外,Servlet 4.0 还包含更细微的管理性更改和对 HTTP Trailer 的支持。新的 GenericFilter 和 HttpFilter 类简化了过滤器的编写,实现了对 Java SE 8 的一般性改进。

Bean Validation 2.0

Bean Validation 2.0 通过一系列新特性得到了增强,其中许多特性是 Java 开发人

首页 上一页 1 2 3 4 5 6 下一页 尾页 2/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Java 多线程知识小抄集 ( 一 ) 下一篇从串行线程封闭到对象池、线程池

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目