日韩性视频-久久久蜜桃-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)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 初尝情欲h名器av | 夜夜草天天草 | 国产成人无码精品久久久电影 | 肉嫁高柳在线 | 亚洲欧洲一区二区在线观看 | 福利一区在线观看 | 色94色欧美sute亚洲线路二 | av中文字幕av | 五月天国产在线 | 久久久综合久久久 | 四虎黄色网址 | 九九热在线观看视频 | 日本加勒比在线 | 五十路在线 | 视频在线一区二区 | 激情视频免费在线观看 | 视色在线 | 国产露脸无套对白在线播放 | 四川黄色一级片 | 日韩精品系列 | 精品久久久久久久中文字幕 | 日韩中文在线一区 | 国产精品久久久久久久久夜色 | 韩国黄色一级片 | 中文字幕亚洲不卡 | 国产片淫乱18一级毛片动态图 | 无码内射中文字幕岛国片 | 亚洲四虎影院 | 国产99久 | 熟女少妇a性色生活片毛片 亚洲伊人成人网 | 波多野一区| 无码不卡av东京热毛片 | 鲁片一区二区三区 | 亚洲a人 | 日韩在线小视频 | 国产91精品露脸国语对白 | 国产另类在线 | 日韩成人午夜电影 | 亚洲一区二区观看播放 | av在哪里看| 男女网站视频 | 人人插人人草 | 成人免费福利 | 成人a在线 | 欧美一区二区三区色 | 国产精品久久久久久69 | 色呦呦免费 | 色哟哟无码精品一区二区三区 | 中文字幕一级片 | 天堂亚洲网 | 欧美国产日韩在线视频 | 狂野欧美性猛交blacked | 久久国产福利一区 | 超碰中文字幕 | 久久久青青草 | 国产日产久久高清欧美一区 | 久热只有精品 | 色狠av | 日色网站 | avtt2015| 黄页网站视频 | 2023毛片 | 亚洲精品免费在线播放 | 国产一区二区免费 | 嫩草影院永久入口 | 国产精品成人一区二区三区电影毛片 | 韩国毛片网站 | 在线免费不卡视频 | 久久免费视频99 | 国产精品国产三级国产三级人妇 | 中文字幕一区二区视频 | 亚洲精品国产精品国自产在线 | 欧美特级黄色录像 | 精品国产乱码久久久久久久 | 天天上天天干 | 国产黄色精品网站 | 天天干天天操天天摸 | 欧美日韩在线综合 | 少妇无套内谢免费视频 | a天堂在线 | 天天干天天操天天插 | 欧美大片视频在线观看 | 精品人妻码一区二区三区红楼视频 | 日韩成人av电影 | 一级黄色a | 久久av一区二区三区亚洲 | 亚洲精品www久久久久久 | 成人麻豆视频 | 午夜影院视频 | 18精品爽国产白嫩精品 | 午夜欧美精品 | 亚洲欧美另类在线 | 久久久女人 | 一区二区三区免费看视频 | 久久午夜国产精品 | 在线观看av中文字幕 | 牛人盗摄一区二区三区视频 | 天堂久久一区 | 国产suv精品一区 |