java ee 8 api_Java EE 8安全性API:概述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/333837.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 命令之 ln -- 为文件创建链接

文章目录一、命令介绍&#xff08;一&#xff09;符号链接的特点&#xff08;二&#xff09;硬链接的特点二、命令格式三、常用选项四、命令示例&#xff08;一&#xff09;创建硬链接&#xff08;二&#xff09;创建软链接一、命令介绍 Linux 具有为一个文件起多个名字的功能…

计算机网络笔记----概述

参考计算机网络自顶向下第七版和计算机网络谢希仁第七版计算机网络和Internet什么是互联网&#xff1f;具体构成描述互联网服务提供商(ISP)服务描述什么是协议&#xff1f;协议分层应用层(最高层)传输层(运输层)网络层&#xff1a;数据链路层和局域网物理层网络边缘接入网家庭接…

prima evb_用Priam设置Cassandra

prima evb前面已经解释了如何在AWS中设置Cassandra 。 所描述的设置有效&#xff0c;但在某些情况下可能还不够。 例如&#xff0c;它不能为您提供制作和还原备份的简便方法&#xff0c;添加新节点依赖于自定义python脚本&#xff0c;该脚本会随机选择一个种子。 因此&#xf…

Java 9:Process API的增强

Java 9对Process API进行了各种改进&#xff0c;用于控制和管理操作系统进程。 获取有关流程的信息 有一个新的ProcessHandle类&#xff0c;提供了进程的pid&#xff0c;父级和后代&#xff0c;以及有关开始时间和累积CPU时间的信息。 jshell> Process p new ProcessBui…

HTTP的操作过程

HTTP的操作过程 HTTP协议定义了浏览器&#xff08;即万维网客户进程&#xff09;怎样向万维网服务器请求万维网文档&#xff0c;以及服务器怎样把文档传送给浏览器。HTTP是面向事务(一系列的信息交换&#xff0c;不可分割的整体)的应用层协议&#xff0c;它是万维网上能够可靠…

什么是绝对值?

绝对值是指一个数在数轴上所对应点到原点的距离&#xff0c;用 | | 来表示。|b-a| 或 |a-b| 表示数轴上“表示a的点”和“表示b的点”的距离。 正数 x 的绝对值表达式&#xff1a;| x | x&#xff0c;负数 x 的绝对值表达式&#xff1a;| x | -x&#xff0c;0 绝对值表达式&…

viewer vue 文档_vue中使用viewerjs

项目创建vue init webpack mytest001安装viewerjsnpm install viewerjs删掉生成的项目里面的helloWord.vue 修改路由 创建一个index.vueindex.vue代码:import Viewer from viewerjs;import viewerjs/dist/viewer.css;export default {name: HelloWorld,data() {return {imgArr:…

junit junit_JSON的JUnit Hamcrest Matcher

junit junit这篇文章展示了如何编写JUnit测试来检查对象是否与JSON字符串匹配。 如果您要实现REST服务并想测试您的服务是否产生了预期的JSON响应&#xff0c;那么这非常重要。 JSONassert是比较JSON对象的有用库。 首先&#xff0c;您必须将Java对象转换为JSON字符串&#xf…

HTTP报文格式

HTTP报文格式 HTTP规范&#xff3b;RFC 1945&#xff1b;RFC 26167&#xff1b;RFC 7540:包含了对HTTP 报文格式的定义。HTTP 报文有两种&#xff1a;请求报文和响应报文。 HTTP请求报文 从客户向服务器发送请求报文。 结构如图&#xff1a; 开始行 第一行为开始行也叫做…

什么是公倍数

公倍数(common multiple)是指在两个或两个以上的自然数中&#xff0c;如果它们有相同的倍数&#xff0c;这些倍数就是它们的公倍数。公倍数中最小的&#xff0c;就称为这些整数的最小公倍数&#xff08;lowest common multiple&#xff09;。 A和B&#xff0c;A/BC&#xff0c…

代理服务器

代理服务器 是一种网络实体&#xff0c;又称万维网高速缓存。代理服务器把最近的一些请求和响应暂存在本地磁盘中。 当新请求到达时&#xff0c; 若代理服务器发现这个请求与暂时存放的请求相同&#xff0c; 就返回暂存的响应&#xff0c; 而不需要按URL的地址再次去互联网访问…

json解析对象时指定解析_不解析,使用解析对象

json解析对象时指定解析将面向对象的后端与外部系统集成的传统方式是通过数据传输对象 &#xff0c;这些对象在外出之前先序列化为JSON&#xff0c;然后在返回时反序列化。 这种方法很流行&#xff0c;而且是错误的。 序列化部分应该由打印机代替&#xff0c;我在前面已经解释过…

centos7设置键盘类型_CentOS 7 系统区域(语言)和键盘设置

即使是在window中,平常说的语言设置这一项也是归类为系统区域,CentOS可以通过修改/etc/locale.conf配置文件或使用localectl命令来进行设置,一般在安装时设置为默认选择(英文、美式键盘)即可。 修改locale.conf [root@localhost ~]#vim /etc/locale.conf LANG="en_US.U…

什么是公约数/公因数

公约数&#xff0c;亦称“公因数”。它是指能同时整除几个整数的数。如果一个整数同时是几个整数的约数&#xff0c;称这个整数为它们的“公约数”&#xff1b;公约数中最大的称为最大公约数。对任意的若干个正整数&#xff0c;1总是它们的公因数。 例如&#xff1a; 12 和 15…

vue对象拼接_vue 俩个数组对象合并成一个

情况是这样的后端给了几个接口数据 我合成一个 前端小白 勿喷 data(){return{list:[{date:20201, mc : 1 }, {date:20202, mc : 2 }, {date:20203, mc : 3 }, {date:20204, mc : 4, } ], newlist:[ {date:20201, mc : 6, age:12 }, {date:20202, mc : 3, age:12 }, {date:20203…

jdk8 获取上一个月时间_JDK 10:FutureTask获取一个toString()

jdk8 获取上一个月时间我已经很长时间了&#xff0c;对于大多数具有独特属性的Java类&#xff0c;开发人员应该花些时间重写Object.toString&#xff08;&#xff09; &#xff0c;即使它仅是由IDE生成的实现或使用诸如Apache之类的库类来实现Commons Lang的ToStringBuilder 。…

什么是质数

质数是指在大于1的自然数中&#xff0c;除了1和它本身以外不再有其他因数的自然数。 质数又称素数。一个大于1的自然数&#xff0c;除了1和它自身外&#xff0c;不能被其他自然数整除的数叫做质数&#xff1b;否则称为合数&#xff08;规定1既不是质数也不是合数&#xff09;。…

计算机网络笔记----应用层

应用层应用层协议原理网络应用程序的体系结构客户-服务器体系结构P2P体系结构进程通信进程与计算机网络之间的接口进程寻址可供应用程序使用的运输服务可靠数据传输吞吐量定时安全性因特网提供的运输服务TCP服务面向连接的服务可靠的数据传送服务拥塞控制TCP安全UDP服务应用层协…

js 导出pdf上传至oss_js实现oss文件上传及一些问题

关于兼容性问题&#xff0c;ie8以下的可以使用4.x的版本一、引入sdk和jq二、基本配置var client newOSS.Wrapper({region:,accessKeyId:‘,accessKeySecret:,bucket:})region&#xff1a;阿里云服务器地址accessKeyId&#xff1a;您的keyaccessKeySecret&#xff1a;您的密码&a…

缓冲池java_了解Java缓冲池

缓冲池java了解Java缓冲池 缓冲池空间位于垃圾收集器管理的内存之外。 这是分配本地堆外内存的一种方法。 使用缓冲池有什么好处&#xff1f; 为了回答这个问题&#xff0c;让我们首先了解什么是字节缓冲区。 字节缓冲区 非直接缓冲区 ByteBuffer类附带了java.nio包。 它允许我…