Vert.x 安全和访问控制 译<九>

TIP:相应的代码在step-7文件夹中(https://github.com/vert-x3/vertx-guide-for-java-devs)java

在这个章节中咱们在Vert.x实现安全和访问控制是简单的,咱们将作下面的事情:git

    1.把http改为用httpsgithub

    2.添加基于组的权限的用户身份验证web

    3.用JSON web tokens (JWT)控制访问的APIapache

Vert.x的HTTPS支持浏览器

Vert.x支持SSL-encrypted的网络链接,常见的在生产环境提供HTTP server服务,经过像Nginx这样的HTTP服务/proxy,使用HTTPS来处理链接服务。固然Vert.x自身也能够提供HTTPS而且end-to-end encryption。安全

证书能够存储在java keystore文件中,你可能须要建立一个测试证书,这里是如何建立一个server-keystore.jks keyStore服务器

咱们能够经过HttpServerOptions在建立HTTP服务的地方加入KeyStore文件来支持SSL微信

咱们可使用浏览器访问 https://localhost:8080/,由于那个证书是self-signed,因此会在好的浏览器的认证中提示安全警告信息。网络

而后,咱们须要更新测试用例ApiTest中的,web client请求的代码:

    1.设置SSL为true

    2.既然那个证书是self-signed,咱们须要选择相信它,不然链接会失败,就像浏览器上看到的同样。

访问控制和认证

Vert.x提供了不少的身份认证和受权的可选项,官方支持模块包括知名厂商的JDBC, MongoDB, Apache Shiro, OAuth2和 JWT (JSON web tokens)。

在下一节将涵盖JWT,将使用Apache Shiro 来作认证,LDAP or Active Directory服务返回认证信息。在咱们的例子里,在咱们的例子中咱们能够简单的将凭证存储在属性文件中,但对一个LDAP服务器API的使用是同样的。

目标是要求用户使用wiki须要验证,和基于角色的权限控制:

    1.若是不是某种角色只能浏览

    2.若是有写的角色就能够编辑页面

    3.若是有编辑的角色就能够建立,编辑和删除页面

    4.若是有管理员权限,那能够有全部的权限了

WARNING:

关于Vert.x与Apache Shiro集成内部实现有一些问题,部分阻塞可能影响性能,一些数据的存储使用了 thread local,你不该该滥用内部API。

添加Apache Shiro认证

第一步咱们先把vertx-auth-shiro模块加入pom.xml中:

在配置文件中定义了咱们使用的,位于src/main/resources/wiki-users.properties

带有user-前缀的是用户帐号,第一个字段是密码,后面接着的是角色。好比bar用户的密码是bar,角色事writer,writer有update的权限。

回到HttpServerVerticle类中,咱们使用 Apache Shiro建立一个一个权限认证提供者:

ShiroAuth对象用于处理服务端的用户会话:

    1.咱们为请求创建一个用户会话吹程序

    2.当请求尚未用户会话的时候将会重定向到登陆页面

    3.咱们将加入authHandler用来认证

最后咱们须要建立3个请求,用于登陆,提交表单,注销:

    1.FormLoginHandler用于处理登陆请求,默认状况下,HTTP的post请求中有登录信息的username,password,return_url用于重定向到成功页面。

    2.注销用户的瘦须要清除RoutingContext终端额会话信息。

下面是RoutingContext的实现:

HTML页面的模板 src/main/resources/templates/login.ftl

页面显示的效果:

支持基于角色的功能

功能是更具用户的权限来的,在下面的截图,管理员角色能够建立一个网页和执行备份:

用户没有角色不能执行这些操做:

咱们能够访问RoutingContext,来查询权限信息。下面是indexHandler方法实现:

    1.这是是查询权限,是个异步操做

    2.操做result

    3.应用到HTML模板中

    4.获取登陆信息

咱们修改模板中的代码,来渲染canCreatePage的显示:

这个代码和更新或者删除的页面和访问Git repository的处理是同样的。

不单单在HTML页面须要检查HTTP POST请求的数据,在服务端的处理程序也须要检查。事实上,恶意攻击者能够根据请求执行不被认证的权限,这里的pageDeletionHandler程序用来保护页面删除的权限控制:

 

原文连接:http://vertx.io/docs/guide-for-java-devs/

个人微信公众号:

相关文章
相关标签/搜索