近期 Stormpath发布了用户管理和认证的 Java SDK 1.0 版。Stormpath 一般会针对 Web 和移动应用的认证、授权和用户管理的实现(其中包括开源实现)提供 API,目标定位是一系列的语言和框架。它们是 Apache 认证的,托管于 GitHub,他们的价目表表明针对开发者计划“永久免费”。
Stormpath 的 Java SDK 提供了针对简单古老的 servlet 的集成,以及 Spring、Spring Security 和 Spring Boot 的集成。如果要在 Spring Boot 应用中集成 Stormpath 支持,你只需要增加一个 stormpath-default-spring-boot-starter 依赖。如果你使用的是 Maven:
<dependency> <groupId>com.stormpath.spring</groupId> <artifactId>stormpath-default-spring-boot-starter</artifactId> <version>1.0.3</version> </dependency>
或者如果你更喜欢用 Gradle:
dependencies { compile 'com.stormpath.spring:stormpath-default-spring-boot-starter:1.0.3' }
在这些修改之后,你的应用将有许多开箱即用的功能,包括登录、登出、注册、忘记密码和邮箱验证。你甚至可以配置社交登录或 SAML(安全声明标记语言)支持,在 Stormpath 的仪表盘中直接配置即可使用。以下是登录和注册功能的截图:
如果你正在使用 Spring Security,那么就需要一个 Spring Security 配置类来集成 Spring Security。在增加这个类后,你就能以传统方式轻松地配置 Spring Security 了。
import static com.stormpath.spring.config.StormpathWebSecurityConfigurer.stormpath; @Configuration public class SpringSecurityWebAppConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.apply(stormpath()); } }
Stormpath 的 Java SDK 还提供了一个内容导航功能,有它就能够使用 JavaScript 客户端了。在接收到显式的 application/json 报头时它会返回一个 JSON 串,而不是返回由 JSP 或 Thymeleaf 生成的 HTML。为理解如何使用 AngularJS 来做这件事,可以查看他们的 Angular + Spring Boot + Stormpath 的示例应用。
伴随的测试套件 Stormpath Framework TCK 被用来验证所有 SDK 功能是一致的。它的测试是以 Groovy 语言用 REST-assured 写的,用来驱动应用并验证功能性。该 JAVA SDK 也有很多的测试是用 Groovy 写的,研究这两个开源项目能从中得到教学价值。
为对该版本有更多的了解,InfoQ 专门采访了 Stormpath 开发人员传道者 Micah Silverman。
InfoQ:你提供了针对 Java 的多种集成,对大多数流行的集成你有过统计吗?你是如何看待 servlet 的应用趋势的?
Micah Silverman:在过去的 90 天里,有 4.7% 使用了 servlet 与 Stormpath 传输,它们部分使用了 Java SDK。有 68% 的 Java 传输来自于 Stormpath Spring Boot 集成变体(有和没有 Spring Security),其中有 51% 的 Java 通信包括 Stormpath Spring Security 集成。
InfoQ**:在Stormpath的Java SDK中最难实现的一部分是什么?**
Silverman:我认为最大的挑战是 Stormpath Spring Security 集成。请求在通往响应的早期即冲击 Spring Security,所以在没有重复代码的情况下实现同时具有和不具有 Spring Security 的功能非常棘手。
InfoQ:在 1.0 版本中,你们的什么特性是最值得关注的?
Silverman:在 1.0 版本中,最值得注意的特性是依从于 Stormpath Framework 规范。除此之外,还使 Java SDK 和集成与其他 Stormpath 语言 SDK 保持一致,这使得我们现在可以在配置文件中指定内容导航了。这就很容易将单页应用(SPA)和 Stormpath 集成配合来用了,在这种情况下现代流行的内容导航规则是很有必要的。
InfoQ**:你准备支持JSF和 ****/或Java EE 8 MVC**吗?
Silverman:我们没有集成 JSF 或 Java EE 8 的明确计划。然而,这并不会妨碍开发人员结合 Stormpath 集成来发挥这些技术的优势。
InfoQ:Stormpath 在自己构建的安全实现之上增加了什么?
Silverman:Stormpath 的专长是后端的安全敏感信息。这是个不小的任务,也正是我们作为一家公司要做的。所有 SDK 和跨语言的集成的目的使开发人员易于使用 Stormpath,为此我们已经把“难啃的骨头”抽离了出来。对于 Java 来说尤其如此,我们针对它有 6 个主要集成:Shiro、Servlet、Spring WebMVC、Spring Security Spring WebMVC、Spring Boot WebMVC、Spring Security Spring Boot WebMVC。Java 集成是完全模块化的,所以你可以混合和匹配任何 Spring 集成,而不仅限于以上指定的四个。
InfoQ**:在具有像Spring Security和JHipster之类已有工具的世界中,你们适合在什么位置?**
Silverman:我们有一个直至惯用的 Spring 表达式语言(比如使用 Stormpath 组的 hasAuthority)的 Spring Security 的深度集成。虽然我们还没有一个技术路线的具体计划,但我们正在关注着大多数流行 Java 框架的集成,包括 JHipster 和 Dropwizard。
评论