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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jaas_受JAAS保护的JAX-RS端点

發(fā)布時間:2023/12/3 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jaas_受JAAS保护的JAX-RS端点 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

jaas

隨著RESTFUL(JAX-RS)作為創(chuàng)建Web服務(wù)端點的“首選”方式的問世,很長一段時間以來,我一直想知道人們?nèi)绾螄@它實現(xiàn)安全機(jī)制。

歸根結(jié)底,我假設(shè)JAX-RS的基礎(chǔ)實現(xiàn)是servlet,因此其安全性也可能圍繞容器(即JAAS)已經(jīng)提供的安全性。

這篇文章將涵蓋我在Glassfish 3上如何使用JDBC領(lǐng)域,JAX-RS逐步實現(xiàn)基于FORM的安全性以及如何使用cURL對其進(jìn)行測試的發(fā)現(xiàn)。

設(shè)置JDBC領(lǐng)域

首先,因為我們使用的是JDBC領(lǐng)域,所以我們假設(shè)我們已經(jīng)在JNDI jdbc/test下創(chuàng)建了到基礎(chǔ)數(shù)據(jù)庫的JDBC連接。

下一步是創(chuàng)建一個新領(lǐng)域。 您可以通過以下方法執(zhí)行此操作:轉(zhuǎn)到服務(wù)器配置>安全性>領(lǐng)域,然后添加一個新領(lǐng)域。 選擇領(lǐng)域類型com.sun.enterprise.security.auth.realm.jdbc.JDBCRealm ,然后填充必填字段。

  • 首先給您的新領(lǐng)域起一個名字。
  • 對于JAAS Context,將jdbcRealm
  • 填充JNDI名稱,最好以"jndi/"開頭

接下來,請注意其余字段。 Glassfish似乎希望看到兩個表。 第一個表包含用戶列表,其中用戶名是其唯一標(biāo)識符。 第二張表列出了每個用戶所屬的組。 用戶名是兩個表之間的外鍵鏈接。 (下一節(jié)應(yīng)該讓您更好地了解表格的外觀,畢竟它們非常簡單)。

一旦創(chuàng)建了這些表,我們就可以相應(yīng)地填充必填字段。

填充數(shù)據(jù)庫以進(jìn)行測試

下一步是填充表以進(jìn)行測試。 假設(shè)我們將使用用戶名hpotter和password test 。 但是,對于密碼,請注意,Glassfish的摘要默認(rèn)情況下為SHA-256,如以下屏幕截圖所示。

因此,您需要在插入之前對密碼test進(jìn)行編碼。 您可以使用technipixel編碼器,這將為您提供字符串9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08 。

下一步是編寫一些INSERT語句:

INSERT INTO person (id, password, username) VALUES (1, '9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08', 'hpotter'); COMMIT; INSERT INTO person_role (username, user_group) VALUES ('hpotter', 'User'); INSERT INTO person_role (username, user_group) VALUES ('hpotter', 'Admin'); COMMIT;

讓我們繼續(xù)下一步。

使用JAAS保護(hù)Web應(yīng)用程序的安全

關(guān)于JAAS的很多使用FORM認(rèn)證方法的教程。 但是,我想我再把它放在這里,希望有人會發(fā)現(xiàn)它更簡單。

web.xml

對您的web.xml進(jìn)行以下修改

<welcome-file-list><welcome-file>/index.jsp</welcome-file><!-- 1 --></welcome-file-list><security-constraint><!-- 2 --><display-name>TestConstraint</display-name><web-resource-collection><web-resource-name>TestResource</web-resource-name><description/><url-pattern>/*</url-pattern></web-resource-collection><auth-constraint><description/><role-name>User</role-name><role-name>Admin</role-name></auth-constraint></security-constraint><login-config><!-- 3 --><auth-method>FORM</auth-method><realm-name>testRealm</realm-name><form-login-config><form-login-page>/login.html</form-login-page><form-error-page>/error.html</form-error-page></form-login-config></login-config><security-role><!-- 4 --><description/><role-name>User</role-name></security-role><security-role><!-- 5 --><description/><role-name>Admin</role-name></security-role>

讓我們一一講解它們。

  • 這是成功登錄后將顯示的文件。 您也可以將此文件用作重定向。 例如,假設(shè)您有一個名為index.xhtml的文件(一個JSF頁面),則可以使用response.sendRedirect("index.jsf");
  • 這是實際的約束,即如何保護(hù)應(yīng)用程序。 此部分基本上可以保護(hù)所有對應(yīng)用程序的訪問,以/* url模式表示,并且僅允許以User和Admin角色訪問用戶。
  • 這部分表示我們正在使用的是FORM身份驗證方法(我將在下一部分中對其進(jìn)行詳細(xì)說明)。 重要的部分是確保使用的安全領(lǐng)域的名稱正確,在這種情況下,該名稱為testRealm ,即與我們通過Glassfish管理頁面進(jìn)行設(shè)置時提供的相同領(lǐng)域名稱。 另一部分是設(shè)置包含j_security_check的頁面,如果尚未驗證請求訪問權(quán)限,則應(yīng)用程序?qū)⒆詣又囟ㄏ虻皆擁撁妗?
  • 已知角色
  • 與上一節(jié)相同。
  • glassfish-web.xml

    我們還需要配置glassfish-web.xml以便容器知道數(shù)據(jù)庫中組之間的映射以及應(yīng)用程序識別的角色。

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd"> <glassfish-web-app error-url=""><security-role-mapping><role-name>Admin</role-name><group-name>Admin</group-name></security-role-mapping><security-role-mapping><role-name>User</role-name><group-name>User</group-name></security-role-mapping><class-loader delegate="true"/><jsp-config><property name="keepgenerated" value="true"><description>Keep a copy of the generated servlet class' java code.</description></property></jsp-config> </glassfish-web-app>

    注意:如果您使用Netbeans,則可能會為您生成此文件。

    登錄頁面:login.html

    如果我們再次參考上面的web.xml ,請注意登錄頁面指向login.html 。 對于FORM身份驗證方法,根據(jù)規(guī)范,我們需要使用j_security_check , j_username和j_password (Oracle 2013)。

    <!DOCTYPE html> <html><body><form action="j_security_check" method="post"><p><strong>Username</strong><input type="text" name="j_username" size="25" /></p><p><strong>Password</strong><input type="password" size="15" name="j_password" /></p><p><input type="submit" value="Submit" /><input type="reset" value="Reset" /></p></form></body> </html>

    完成所有這些操作后,我們可以啟動Glassfish,部署我們的應(yīng)用程序并使用任何瀏覽器對其進(jìn)行測試。 訪問該應(yīng)用程序后,應(yīng)將用戶定向到login.html進(jìn)行登錄。 請記住使用hpotter作為用戶名并test作為密碼。 成功登錄后,應(yīng)將用戶重定向到index.jsp (根據(jù)您的要求,該重定向又將用戶重定向到index.jsf或index.jsp重定向到的任何內(nèi)容)。

    創(chuàng)建一個RESTFUL端點

    當(dāng)然,下一步是創(chuàng)建一個RESTFUL端點,這非常簡單。 我在這里寫的一篇文章可能也很有用。

    首先,假設(shè)我們具有以下應(yīng)用程序路徑。

    package com.dwuysan;import javax.ws.rs.ApplicationPath; import javax.ws.rs.core.Application;/*** @author denywuy*/ @ApplicationPath(value = "resources") public class ApplicationConfig extends Application { }

    讓我們假設(shè)我們具有以下簡單的RESTFUL服務(wù)。

    package com.dwuysan;import com.dwuysan.entity.Outlet; import com.dwuysan.service.OutletService; import javax.annotation.ManagedBean; import javax.annotation.security.RolesAllowed; import javax.inject.Inject; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam;@Path(value = "generic") @RolesAllowed(value = "User") @ManagedBean public class GenericResource {@Injectprivate OutletService outletService;@GET@Path("{id}")public Outlet get(@PathParam(value = "id") final long id) {return this.outletService.getOutlet(id);} }

    請注意,我們已使用javax.annotation.security.RolesAllowed批注保護(hù)了此服務(wù)的安全。

    使用curl測試安全的RESTFUL服務(wù)

    鑒于我們上面創(chuàng)建的RESTFUL服務(wù),我們應(yīng)該能夠使用CURL通過以下命令對其進(jìn)行測試:

    curl -X GET -H "Accept:application/json" -H "Content-Type:application/json" http://localhost:8080/testApp/resources/generic/101

    上面的命令翻譯為以下內(nèi)容:使用GET命中上面的URL,標(biāo)題為Accept:application / json和Content-Type:application / json(cURL 2013)

    由于我們已經(jīng)保護(hù)了我們的應(yīng)用程序,因此上述調(diào)用將無法進(jìn)行。 用戶將被重定向到login.html 。 因此,我們現(xiàn)在的目標(biāo)是首先登錄。 使用cURL,我們可以提交登錄參數(shù)(即用戶名和密碼),然后獲取cookie。 為此,我們可以使用以下命令:

    curl -b cookies.txt -c cookies.txt -d "j_username=hpotter&j_password=test" http://localhost:8080/testApp/j_security_check

    該命令將用戶名和密碼提交給j_security_check (記住我們之前創(chuàng)建的login.html ),并將獲得的cookie存儲在cookies.txt文件cookies.txt 。

    如果打開cookies.txt,則可能會看到以下內(nèi)容:

    # Netscape HTTP Cookie File # http://curl.haxx.se/docs/http-cookies.html # This file was generated by libcurl! Edit at your own risk.#HttpOnly_localhost FALSE /testApp FALSE 0 JSESSIONID 245a317ab91fbb28244403346770

    注意:您可能會收到“文件移動”響應(yīng)。 這意味著登錄已成功。 否則,您將再次獲得error.html的原始html。

    成功通過身份驗證后,我們可以使用從登錄名獲得的cookie來調(diào)用RESTFUL服務(wù)。

    curl -X GET -H "Accept:application/json" -H "Content-Type:application/json" -b cookies.txt -c cookies.txt http://localhost:8080/testApp/resources/generic/101

    參考文獻(xiàn):

    • BalusC,2012年, ``是否基于JSF支持表單的安全性'' ,2013年2月12日訪問。
    • Oracle,2013年, “保護(hù)Web應(yīng)用程序的安全” ,2013年2月12日訪問。
    • Wolff,N,2005年, “如何使用帶有CURL的cookie處理身份驗證?” ,2013年2月12日訪問。

    參考:在dwuysan博客博客中,由我們的JCG合作伙伴 Deny Wuysan提供了JAAS保護(hù)的JAX-RS端點 。

    翻譯自: https://www.javacodegeeks.com/2013/09/jaas-secured-jax-rs-end-point.html

    jaas

    總結(jié)

    以上是生活随笔為你收集整理的jaas_受JAAS保护的JAX-RS端点的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: www国产视频| 91丝袜在线 | 九九九国产视频 | 亚洲欧洲自拍偷拍 | 色av一区| 一久久久久 | 奇米影视在线视频 | 午夜激情四射 | 久艹在线观看 | 一级片视频免费观看 | 中国国语农村大片 | 999av视频 | av在线伊人 | 不卡一二三 | 播播成人网| 2021狠狠操| 九九视频在线播放 | 97超级碰碰 | 国产艳妇疯狂做爰视频 | 欧美 日韩 国产 成人 在线观看 | 精品在线一区 | 亚洲666 | 午夜久久久久久久久久久 | 男女男精品视频站 | 欧美日韩精品 | 亚洲国产视频网站 | 成人午夜视频免费在线观看 | 国产九九九九九 | 亚洲精品免费在线观看视频 | 久久精品99国产精品日本 | 校园sm主奴调教1v1罚视频 | 黄瓜污视频 | 中文字幕素人 | 久久久久成人片免费观看蜜芽 | 亚洲欧美一区二区视频 | 国产精品一线天粉嫩av | 香蕉久久夜色精品国产使用方法 | 人妻偷人精品一区二区三区 | 黄色短视频在线播放 | 久久亚洲少妇 | 香蕉久久久久 | www.色哟哟 | 爱情岛论坛永久入口 | 日本熟妇毛耸耸xxxxxx | 懂色av一区二区夜夜嗨 | 久操国产在线 | 成人免费视频毛片 | 妺妺窝人体色www在线下载 | 男女激情网 | 中文字幕人妻一区二区三区 | 国产伊人av| 成人免费在线看片 | 粗了大了 整进去好爽视频 日本女优中文字幕 | 99久久久国产精品无码网爆 | 日本在线视频一区二区三区 | 国产精品三级久久久久久电影 | 丁香婷婷综合激情五月色 | 毛片日韩 | 日本精品一二三 | 国产精品嫩草影院桃色 | 亚洲宗人网 | 人妻夜夜爽天天爽 | 精品国产免费人成在线观看 | 天天摸天天操天天爽 | 天天看夜夜爽 | fc2ppv在线播放 | 国产精品夜夜嗨 | 黄色一级在线视频 | 91精品综合久久久久久五月天 | 亚洲天堂五月 | 欧美无砖专区免费 | 在线观看网站 | 欧美色图亚洲激情 | 国产精品成人自拍 | 很黄的网站在线观看 | 国产美女特级嫩嫩嫩bbb | 都市激情综合 | 欧美一级片播放 | 久久久精品电影 | 日批视频免费在线观看 | 午夜天堂在线观看 | 丝瓜av| 在线免费观看小视频 | 97超碰国产在线 | 久久888 | 欧美性爱精品一区 | 刘亦菲毛片 | 精品动漫一区二区 | 91av视频在线 | 国产麻豆影视 | 亚洲综合网站 | 日皮在线观看 | 久久久久久色 | 国产精品成久久久久三级 | 久久9精品区-无套内射无码 | 亚洲精品无码专区 | 国产视频久久久 | 伊人黄色片| 日b视频在线观看 |