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实现旨在使用IdentityStore ,但这不是必需的IdentityStore可以独立存在,并且可以由应用程序开发人员希望的任何其他身份验证机制使用。

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

现在,您可以通过实现IdentityStore接口来实现自己的身份存储,或者可以将内置的IdentityStore实现之一用于LDAP和关系数据库。 通过将配置详细信息传递给适当的注释@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

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

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

相关文章

基于SSH的校园网上购物系统Javaweb、MySQL、JSP

微信公众号&#xff1a;创享日记 发送&#xff1a;校园购物 获取完整论文报告项目Java和SQL源码源文件答辩PPT等 主要内容&#xff1a; 1&#xff0e;对校园网上购物平台的建设需求进行分析&#xff0c;包括产品、服务方式等。 2&#xff0e;按需求对各个功能模块进行设计。 3&…

Python传感器采集数据文件分析处理实验源码

前些天发现了一个巨牛的人工智能学习电子书&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;无广告&#xff0c;忍不住分享一下给大家。&#xff08;点击跳转人工智能学习资料&#xff09; 一、题目 附件sensor-data.txt是一个传感器采集数据文件&#xff0c;其中&#…

Java Stream ORM现在带有JOIN

Speedment是一个Java Stream ORM工具包和运行时&#xff0c;它使您可以将数据库表作为标准Java Streams查看。 由于不必混合使用Java和SQL&#xff0c;因此该应用程序变得更加紧凑&#xff0c;从而使其开发速度更快&#xff0c;更不容易出错并且更易于维护。 流也严格地是类型安…

易购数码类电商商城网页设计与实现项目源码

前些天发现了一个巨牛的人工智能学习电子书&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;无广告&#xff0c;忍不住分享一下给大家。&#xff08;点击跳转人工智能学习资料&#xff09; 微信公众号&#xff1a;创享日记 发送&#xff1a;易购网站 获取完整报告论文源…

Python定义一个单链表可判断是否为空,计算长度,插入节结点实验

前些天发现了一个巨牛的人工智能学习电子书&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;无广告&#xff0c;忍不住分享一下给大家。&#xff08;点击跳转人工智能学习资料&#xff09; 一、题目 使用python定义一个单链表&#xff0c;并实现以下功能&#xff1a; (…

复信号两种不同加噪方式的比较

方式一 分别对信号实部和虚部加噪&#xff0c;SNR30&#xff0c;然后将实部和虚部合起来变成复信号&#xff0c;计算合起来之后的信号与噪声功率之比 %% 测试加噪方式 clear;close all;clc; M4;len10000; xk randi([0,M-1],1,len); xk pskmod(xk,4); SNR 30; xkR real(xk…

Python统计各省份字典中双一流学校数量实验

前些天发现了一个巨牛的人工智能学习电子书&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;无广告&#xff0c;忍不住分享一下给大家。&#xff08;点击跳转人工智能学习资料&#xff09; 一、题目 字典d中存储了我国42所双一流高校及所在省份的对应关系&#xff0c;请…

servlet文件上传下载_Servlet上传文件和下载文件示例

servlet文件上传下载Java Web应用程序中的文件上载和下载以及常见任务。 由于最近我写了很多有关Java servlet的文章 &#xff0c;因此我想提供一个使用servlet上传和下载文件的示例示例。 用例 我们的用例是提供一个简单HTML页面&#xff0c;客户端可以在其中选择要上传到服务…

Ollydbg使用教程学习总结(一)

解密系列之OD使用教程1 使用例子程序为Hello.exe OD基本快捷键及功能 从系统DLL领空返回到程序领空&#xff0c;AltF9 通过OD将程序的标题“Hello world”改为“OD Class 01” 直接单步执行法 按F8单步执行&#xff0c;找到MessageBox传参的地方&#xff0c;直接在数据窗口修…

Python连锁药店营业额数据分析实验

前些天发现了一个巨牛的人工智能学习电子书&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;无广告&#xff0c;忍不住分享一下给大家。&#xff08;点击跳转人工智能学习资料&#xff09; 一、题目 附件drug. order_ detai 1.xlsx是某连锁药店销售数据&#xff0c;请使…

Python计算细胞核与细胞质的面积比opencv或pil实验

前些天发现了一个巨牛的人工智能学习电子书&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;无广告&#xff0c;忍不住分享一下给大家。&#xff08;点击跳转人工智能学习资料&#xff09; 一、题目 根据附件cell.jipg&#xff0c;使用opencv库或者PIL库计算细胞核与细胞…

Ollydbg使用教程学习总结(二)

解密系列之OD使用教程4 程序1&#xff1a;RegisterMe.exe 把程序跑一遍之后我们发现程序有两个NAG&#xff0c;一个是在程序界面启动前出现&#xff0c;另一个是在程序关闭后出现的。 去掉第一个Nag方法如下&#xff1a; ①jmp跳过 ②全部nop掉 ③令hOwner参数为1&#xf…

Python基于Django的电影推荐系统和论坛项目完整源码

前些天发现了十分不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;没有广告&#xff0c;分享给大家&#xff0c;大家可以自行看看。&#xff08;点击跳转人工智能学习资料&#xff09; 微信公众号&#xff1a;创享日记 发送&#xff1a;电影论坛 获…

Ollydbg使用教程学习总结(三)

解密系列之OD使用教程9 程序&#xff1a;MrBills.exe 点击注册&#xff0c;输入邮箱和序列号后提示如下 突破口&#xff1a;该提示窗口中的字符串&#xff0c;查找如下 双击来到反汇编窗口&#xff0c;有个关键跳转&#xff0c;往上查看影响跳转的语句是test al,al&#xf…

Python用matplotlib绘制曲线实验

一、题目 计算出每组数据的均值和标注差&#xff0c;用matplotlib画出如下风格。横轴是每组的序号&#xff0c;即1&#xff0c;2&#xff0c;… 10&#xff0c;曲线的圆点对应均值&#xff0c;颜色范围为标注差&#xff0c;显示垂直和水平网格线。 二、题目分析 首先分析这…

Ollydbg使用教程学习总结(五)

解密系列之OD使用教程17——inline patch 程序&#xff1a;ReverseMe. NAGs.exe 新内容&#xff1a;硬件断点 用PEID打开&#xff0c;看到程序是用VC6.0写的&#xff0c;用OD载入&#xff0c;按F9运行后&#xff0c;出现NAG窗口&#xff0c;在OD中按下暂停&#xff0c;再打开堆…

Python的Wine数据集分类scikit-learn和K近邻实验

一、题目 请使用scikit-learn库和K近邻分类器完成Wine数据集的分类&#xff0c;训练比例自定。(数据下载: https://archive.ics.uci.edu/ml/datasets/Wine) 二、题目分析 这道题目就是获取数据然后分类的过程。首先在网站上下载好数据。然后回到Pycharm导入实验所需要的skle…

[MEGA DEAL]完整的Java捆绑包(96%折扣)

深入了解编程奥德赛&#xff08;58小时&#xff01;&#xff09;&#xff0c;进入最常用的编程语言 嘿&#xff0c;怪胎&#xff0c; 本周&#xff0c;在我们的JCG Deals商店中 &#xff0c;我们提供了另一个超值优惠 。 我们为The Complete Java Bundle提供96&#xff05;的…

基于PLC十字路口交通灯控制(可计算车流量、调整时间等)课程设计毕业设计

微信公众号&#xff1a;创享日记 发送&#xff1a;plc交通灯 获取完整论文报告&#xff08;内含梯形图程序、无水印流程图等&#xff09; 按照城市交通控制的需要&#xff0c;本文讨论了用PLC实现正常时序、急车强通2种控制方式&#xff0c;通过传感器与PLC完成对交通异常状况&…

Ollydbg使用教程学习总结(四)

解密系列之OD使用教程13——迷途 程序&#xff1a;XoftSpy41._96.exe 用PEID查看&#xff0c;是VC6编写的程序&#xff0c;用OD载入 获取文本框输入内容API&#xff1a;GetWindowTextA API下断方法&#xff1a; a.右键>查找>所有模块间的调用&#xff0c;直接输入API&am…