日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

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

發(fā)布時(shí)間:2023/12/3 java 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java ee 8 api_Java EE 8安全性API:概述 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

java ee 8 api

新的安全性API

Java EE 8中添加的最重要的一項(xiàng)新功能可能就是新的安全性API。

此新API的主要?jiǎng)訖C(jī)是簡(jiǎn)化,標(biāo)準(zhǔn)化和現(xiàn)代化跨容器和實(shí)現(xiàn)處理安全性問題的方式。 他們做得很好。

  • 由于三個(gè)新的注釋使web.xml文件聲明多余,Web身份驗(yàn)證的配置已實(shí)現(xiàn)現(xiàn)代化。
  • 新的Security Context API標(biāo)準(zhǔn)化了Servlet和EJB容器執(zhí)行身份驗(yàn)證以及
  • 新的Identity S 撕裂了抽象以簡(jiǎn)化身份存儲(chǔ)的使用。

現(xiàn)在,讓我們看看這些新功能中的第一個(gè)。

注釋驅(qū)動(dòng)的認(rèn)證機(jī)制

此功能全部與配置Web安全有關(guān)。 web.xml文件中需要哪種傳統(tǒng)的XML聲明。

由于有了HttpAuthenticationMechanism接口,該接口代表HTTP身份驗(yàn)證,并帶有三個(gè)內(nèi)置的啟用CDI的實(shí)現(xiàn),每個(gè)實(shí)現(xiàn)都表示可配置Web安全性的三種方式之一,因此不再需要此功能。

使用這些注釋之一觸發(fā)它們。

@BasicAuthenticationMechanismDefinition @FormAuthenticationMechanismDefinition @CustomFormAuthenticationMechanismDefinition

它們復(fù)制了servlet容器中已經(jīng)可用的經(jīng)典HTTP基本身份驗(yàn)證,表單和基于自定義表單的身份驗(yàn)證的功能。

例如,要啟用基本身份驗(yàn)證, 僅需向您的servlet添加BasicAuthenticationMechanismDefinition批注即可。

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

現(xiàn)在,您可以放棄XML配置,并使用這些新注釋之一來提高Web安全性。

安全API的下一個(gè)重要功能是身份存儲(chǔ)抽象。

身份存儲(chǔ)抽象

身份存儲(chǔ)是一個(gè)數(shù)據(jù)庫,用于存儲(chǔ)用戶標(biāo)識(shí)數(shù)據(jù),例如用戶名,組成員身份以及用于驗(yàn)證憑據(jù)的信息。

新的Java EE安全API提供了一個(gè)稱為IdentityStore的身份存儲(chǔ)抽象,用于與身份存儲(chǔ)進(jìn)行交互以認(rèn)證用戶并檢索組成員身份,類似于JAAS LoginModule接口。

盡管不是必需的 ,但HttpAuthenticationMechanism實(shí)現(xiàn)打算使用IdentityStoreIdentityStore可以獨(dú)立存在,并且可以由應(yīng)用程序開發(fā)人員希望的任何其他身份驗(yàn)證機(jī)制使用。

盡管如此, IdentityStoreHttpAuthenticationMechanism的共同使用使應(yīng)用程序可以以可移植的標(biāo)準(zhǔn)方式控制用于身份驗(yàn)證的身份存儲(chǔ),這是大多數(shù)用例場(chǎng)景的推薦方式。

現(xiàn)在,您可以通過實(shí)現(xiàn)IdentityStore接口來實(shí)現(xiàn)自己的身份存儲(chǔ),或者可以對(duì)LDAP和關(guān)系數(shù)據(jù)庫使用內(nèi)置的IdentityStore實(shí)現(xiàn)之一。 通過將配置詳細(xì)信息傳遞給適當(dāng)?shù)淖⑨?strong>@LdapIdentityStoreDefinition或@DataBaseIdentityStoreDefinition來初始化它們。

讓我們看一下內(nèi)置身份存儲(chǔ)的用法。

最簡(jiǎn)單的身份存儲(chǔ)是數(shù)據(jù)庫存儲(chǔ)。 它通過@DataBaseIdentityStoreDefinition批注進(jìn)行配置,如下所示。

@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 { ... }

配置選項(xiàng)非常容易解釋,如果您已經(jīng)配置了數(shù)據(jù)庫定義,則應(yīng)該熟悉它們。

但是,請(qǐng)注意將優(yōu)先級(jí)設(shè)置為10,在運(yùn)行時(shí)找到多個(gè)標(biāo)識(shí)存儲(chǔ)庫并確定相對(duì)于其他存儲(chǔ)庫的迭代順序時(shí)使用。 數(shù)字越小優(yōu)先級(jí)越高。

現(xiàn)在,讓我們看一下安全性API的最終新功能。

安全上下文

安全上下文的目標(biāo)是在servlet和EJB容器之間提供對(duì)安全上下文的一致訪問。

當(dāng)前,這些容器不一致地實(shí)現(xiàn)了安全上下文對(duì)象。 例如,servlet容器提供一個(gè)HttpServletRequest實(shí)例,在該實(shí)例上調(diào)用getUserPrincipal()方法以獲得用戶Principal ,而EJB容器提供一個(gè)不同名稱的EJBContext實(shí)例,在該實(shí)例上調(diào)用相同的命名方法。 同樣地,以測(cè)試用戶是否屬于某個(gè)角色的方法isUserRole()調(diào)用HttpServletRequest的實(shí)例和isCallerInRole()被調(diào)用上EJBContext的實(shí)例。

SecurityContext在Servlet和EJB容器之間提供一致性,以獲取此類信息。 它有五個(gè)方法,沒有一個(gè)具有默認(rèn)實(shí)現(xiàn)。

委托人getCallerPrincipal(); 返回表示當(dāng)前已驗(yàn)證用戶名稱的特定于平臺(tái)的主體,如果當(dāng)前調(diào)用方未通過驗(yàn)證,則返回null。

<T擴(kuò)展Principal> Set <T> getPrincipalsByType(Class <T> pType); 從經(jīng)過身份驗(yàn)證的調(diào)用者的Subject返回給定類型的所有Principal ,否則,如果未找到pType類型或當(dāng)前用戶未經(jīng)過身份驗(yàn)證,則返回一個(gè)空Set

boolean isCallerInRole(String role); 確定呼叫者是否包含在指定角色中,否則,如果用戶未被授權(quán),則返回false。

boolean hasAccessToWebResource(String resource,String…方法); 確定呼叫者是否可以通過提供的方法訪問給定的Web資源。

AuthenticationStatus authenticate(HttpServletRequest req,HttpServletResponse res,AuthenticationParameters param); 通知容器它應(yīng)該開始或繼續(xù)與調(diào)用方進(jìn)行基于HTTP的身份驗(yàn)證對(duì)話。 由于此方法依賴于HttpServletRequestHttpServletResponse實(shí)例,因此只能在servlet容器中使用。

安全上下文是一個(gè)CDI bean,因此可以注入到servlet和EJB容器中的任何類中。

@Inject private SecurityContext securityContext;

有了SecurityContext實(shí)例,您可以調(diào)用任何方法來訪問對(duì)上下文敏感的安全信息。

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

現(xiàn)在,結(jié)束了對(duì)安全性API的概述,對(duì)安全性API有更多的了解。

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

java ee 8 api

總結(jié)

以上是生活随笔為你收集整理的java ee 8 api_Java EE 8安全性API:概述的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。