java ee 8 api

新的安全性API

Java EE 8中添加的最重要的一项新功能可能就是新的安全性API。

此新API的主要动机是简化,标准化和现代化跨容器和实现处理安全性问题的方式。 他们做得很好。

  • 由于三个新的注释使web.xml文件声明多余,Web身份验证的配置已实现现代化。
  • 新的Security Context API标准化了Servlet和EJB容器执行身份验证以及
  • 新的Identity S 撕裂了抽象以简化身份存储的使用。

现在,让我们看看这些新功能中的第一个。

注释驱动的认证机制

此功能全部与配置Web安全有关。 web.xml文件中需要哪种传统的XML声明。

由于有了HttpAuthenticationMechanism接口,该接口代表HTTP身份验证,并带有三个内置的启用CDI的实现,每个实现都表示可配置Web安全性的三种方式之一,因此不再需要此功能。

使用这些注释之一触发它们。

@BasicAuthenticationMechanismDefinition
@FormAuthenticationMechanismDefinition
@CustomFormAuthenticationMechanismDefinition

它们复制了servlet容器中已经可用的经典HTTP基本身份验证,表单和基于自定义表单的身份验证的功能。

例如,要启用基本身份验证, 仅需向您的servlet添加BasicAuthenticationMechanismDefinition批注即可。

@BasicAuthenticationMechanismDefinition(realmName="${'user-realm'}")
@WebServlet("/user")
@DeclareRoles({ "admin", "user", "demo" })
@ServletSecurity(@HttpConstraint(rolesAllowed = "user"))
public class UserServlet extends HttpServlet { … }

现在,您可以放弃XML配置,并使用这些新注释之一来提高Web安全性。

安全API的下一个重要功能是身份存储抽象。

身份存储抽象

身份存储是一个数据库,用于存储用户标识数据,例如用户名,组成员身份以及用于验证凭据的信息。

新的Java EE安全API提供了一个称为IdentityStore的身份存储抽象,用于与身份存储进行交互以认证用户并检索组成员身份,类似于JAAS LoginModule接口。

尽管不是必需的 ,但HttpAuthenticationMechanism实现打算使用IdentityStoreIdentityStore可以独立存在,并且可以由应用程序开发人员希望的任何其他身份验证机制使用。

尽管如此, IdentityStoreHttpAuthenticationMechanism的共同使用使应用程序可以以可移植的标准方式控制用于身份验证的身份存储,这是大多数用例场景的推荐方式。

现在,您可以通过实现IdentityStore接口来实现自己的身份存储,或者可以对LDAP和关系数据库使用内置的IdentityStore实现之一。 通过将配置详细信息传递给适当的注释@LdapIdentityStoreDefinition@DataBaseIdentityStoreDefinition来初始化它们。

让我们看一下内置身份存储的用法。

最简单的身份存储是数据库存储。 它通过@DataBaseIdentityStoreDefinition批注进行配置,如下所示。

@DatabaseIdentityStoreDefinition(dataSourceLookup = "${'java:global/permissions_db'}",callerQuery = "#{'select password from caller where name = ?'}",groupsQuery = "select group_name from caller_groups where caller_name = ?",hashAlgorithm = PasswordHash.class,priority = 10
)
@ApplicationScoped
@Named
public class ApplicationConfig { ... }

配置选项非常容易解释,如果您已经配置了数据库定义,则应该熟悉它们。

但是,请注意将优先级设置为10,在运行时找到多个标识存储库并确定相对于其他存储库的迭代顺序时使用。 数字越小优先级越高。

现在,让我们看一下安全性API的最终新功能。

安全上下文

安全上下文的目标是在servlet和EJB容器之间提供对安全上下文的一致访问。

当前,这些容器不一致地实现了安全上下文对象。 例如,servlet容器提供一个HttpServletRequest实例,在该实例上调用getUserPrincipal()方法以获得用户Principal 而EJB容器提供一个不同名称的EJBContext实例,在该实例上调用相同的命名方法。 同样地,以测试用户是否属于某个角色的方法isUserRole()调用HttpServletRequest的实例和isCallerInRole()被调用上EJBContext的实例。

SecurityContext在Servlet和EJB容器之间提供一致性,以获取此类信息。 它有五个方法,没有一个具有默认实现。

委托人getCallerPrincipal(); 返回表示当前已验证用户名称的特定于平台的主体,如果当前调用方未通过验证,则返回null。

<T扩展Principal> Set <T> getPrincipalsByType(Class <T> pType); 从经过身份验证的调用者的Subject返回给定类型的所有Principal 否则,如果未找到pType类型或当前用户未经过身份验证,则返回一个空Set

boolean isCallerInRole(String role); 确定呼叫者是否包含在指定角色中,否则,如果用户未被授权,则返回false。

boolean hasAccessToWebResource(String resource,String…方法); 确定呼叫者是否可以通过提供的方法访问给定的Web资源。

AuthenticationStatus authenticate(HttpServletRequest req,HttpServletResponse res,AuthenticationParameters param); 通知容器它应该开始或继续与调用方进行基于HTTP的身份验证对话。 由于此方法依赖于HttpServletRequestHttpServletResponse实例,因此只能在servlet容器中使用。

安全上下文是一个CDI bean,因此可以注入到servlet和EJB容器中的任何类中。

@Inject
private SecurityContext securityContext;

有了SecurityContext实例,您可以调用任何方法来访问对上下文敏感的安全信息。

boolean hasAccess = securityContext  .hasAccessToWebResource("/secretServlet", "GET");

现在,结束了对安全性API的概述,对安全性API有更多的了解。

翻译自: https://www.javacodegeeks.com/2018/04/java-ee-8-security-api-overview.html

java ee 8 api

java ee 8 api_Java EE 8安全性API:概述相关推荐

  1. java 常用的api_Java中常用的API(一)——Object

    概述 如果要问Java为什么是用起来非常舒服的语言,那很大一部分的功劳就是JavaAPI的.API定义了许多封装好的类和方法供我们使用,来处理特定的问题,所以学习常用的API是非常重要的. 同时,面向 ...

  2. Java EE 8安全性API:概述

    新的安全性API 可能,添加到Java EE 8中最重要的一项新功能就是新的安全性API. 此新API的主要动机是简化,标准化和现代化跨容器和实现处理安全性问题的方式. 他们做得很好. 由于三个新的注 ...

  3. Java EE 7中的WebSocket客户端API

    在本文中,让我们探索谈论较少的Web Socket Client API,以及如何在Java EE 7容器本身中利用它. Web套接字服务器API规则 JSR 356的服务器端API(Java的Web ...

  4. Oracle把Java EE的未来押在Rest API上了?

    Oracle正在向REST 和 JSON倾斜以使Java EE 适应微服务和云的现代趋势. \\ 作为一种提供Web服务通信的机制,似乎REST从很久以前就抢过了SOAP的风头.SOAP 因其复杂性已 ...

  5. 从Java EE到Jakarta EE,企业版Java的发展历程

    眼看他起高楼,眼看他宴宾客,眼看他楼塌了. 本文已被https://yourbatman.cn收录:程序员专用网盘https://wangpan.yourbatman.cn:公号后台回复"专 ...

  6. 从Java EE到Jakarta EE的发展历程

    目录 ✍前言 JDK发展简史 什么是Java EE? Java EE发展史 补充:什么是Eclipse基金会 有Java EE SDK吗? 什么是Jakarta EE Jakarta EE发展史 一站 ...

  7. java ee 怎么改名_Java EE 改名 Jakarta EE 后 又要换 Logo 了

    关于 Jakarta EE 的规范及版本化的问题,官方还整理一篇"关于 Jakarta EE 你必须知道的 5 件事",主要内容如下: 1.规范 Jakarta EE 规范将由 J ...

  8. J2EE,Java EE,Jakarta EE 命名之间的恩恩怨怨

    介绍 简单来说,上面所有的名字指的都是一个东西 Java Platform, Enterprise Edition 上面的几个名词都是下面的内容的简写: J2EE(Java 2 Platform, E ...

  9. java正则表达式及api_Java魔法堂:深入正则表达式API

    目录 一.前言 正则表达式作为文本处理的利器,早已成为各大语言的必要装备,但各语言对其的实现程度(功能语法支持程度)和API设计均有所差异,本篇将目光投向java原生类库中提供的正则表达式API--  ...

最新文章

  1. Eclispse Che(2):启动Che服务,进入IDE界面
  2. Android:problem opening wizard the selected wizard could not be started
  3. 前端学PHP之正则表达式基础语法
  4. 最新行政区划编码数据
  5. python 并行计算 multiprocessing、multiprocess模块 简介
  6. ScriptManager.RegisterAsyncPostBackControl 方法
  7. 使用Akka简化交易系统
  8. Spring3 RESTful Web服务
  9. 织梦(Dedecms)V5.6 远程文件删除漏洞
  10. HTML table 标签的 summary 属性
  11. 将银行大写数字转换为纯数字
  12. NMAP 端口扫描工具下载 + 安装
  13. 分号与逗号的区别及举例_顿号与逗号与分号间的区别是什么?
  14. ems与nms_告警处理方法、装置、nms、oss及ems的制作方法
  15. 如何设计神经网络结构,如何设计一个神经网络
  16. JAVA计算机毕业设计校园闲置物品信息管理系统Mybatis+源码+数据库+lw文档+系统+调试部署
  17. ChatGPT所有插件详细教程
  18. MySQL索引及视图
  19. Layui表格排序例子
  20. 风电的Weibull分布及光电的Beta分布组合研究(Matlab代码实现)

热门文章

  1. AT3877-[ARC089C]GraphXY【构造】
  2. jzoj5248-[NOIP2017提高A组模拟8.10]花花的聚会【倍增,树形dp】
  3. P4449-于神之怒加强版【莫比乌斯反演】
  4. P3975-[TJOI2015]弦论【SAM】
  5. nssl1255-B(轻功)【SPFA,分层图】
  6. 【模拟】表达式求值(jzoj 1768)
  7. Spring Data之MongoDB配置
  8. JFreeChart(七)之气泡图表​​​​​​​
  9. 写给工程师的10条精进原则
  10. 干货 | 彻底弄懂 HTTP 缓存机制及原理