OSGi環境中的Servlet基本身份驗證

您首先需要獲得對OSGI HTTP Service的引用。 您可以通過聲明性服務來做到這一點。 這篇文章將集中在獲得對HTTP服務的引用之后的步驟。 注意:此職位的完整課程位于此處
通過OSGI HTTP Service注冊Servlet時,它為您提供了提供HTTPContext實現的選項。
httpService.registerServlet(alias, new MyServlet(), initParams, null);

當我們實現HTTPContext接口時,我們可以實現三種方法。 在提供給ermmm的請求之前,將調用這三(3)個handleSecurity中的一部分……檢查安全性。

public class BasicAuthSecuredContext implements HttpContext{@Overridepublic boolean handleSecurity(HttpServletRequest request, HttpServletResponse response) throws IOException {return false;}@Overridepublic URL getResource(String s) {return null;  }@Overridepublic String getMimeType(String s) {return null;}
}

因此,在實現此功能時,我從OSGI HTTPContext文檔和HTTP Authentication spec中借用了很多內容。 如果您有興趣學習很多東西,深入研究細節等內容,則必須閱讀它們。或者您也可以閱讀本文的其余部分。

首先,除非使用https,否則不進行基本身份驗證是一件大事。 如果不存在,我們會讓用戶知道它是禁區。 讓我們繼續做。

if (!request.getScheme().equals("https")) {response.sendError(HttpServletResponse.SC_FORBIDDEN);return false;
}

接下來,讓我們檢查Authorization標頭。 如果那不在那里,我們會讓他們知道,他們需要那種東西才能在那里。 或者我們只是說他們是未經授權的。 現在開始吧。

if (request.getHeader("Authorization") == null) {response.sendError(HttpServletResponse.SC_UNAUTHORIZED);return false;
}

好的,兩項測試通過了。 現在,我們做一些實際的工作。 讓我們提取標頭以對其進行解碼,然后執行“不太正確”的身份驗證。

protected boolean authenticated(HttpServletRequest request) {String authzHeader = request.getHeader("Authorization");String usernameAndPassword = new String(Base64.decodeBase64(authzHeader.substring(6).getBytes()));int userNameIndex = usernameAndPassword.indexOf(":");String username = usernameAndPassword.substring(0, userNameIndex);String password = usernameAndPassword.substring(userNameIndex + 1);// Now, do the authentication against in the way you want, ex: ldap, db stored uname/pw// Here I will do lame hard coded credential check. HIGHLY NOT RECOMMENDED! return ((username.equals("username") && password.equals("password"));}

讓我們將此方法集成到handleSecurity方法中。 請注意,當安全性失敗時,如何將有意義的錯誤消息設置為響應(第14行)。 這樣可以防止用戶猜測,并且他們知道出了什么問題。 Ermm,至少,如果他們知道HTTP錯誤代碼,他們將確切知道出了什么問題。

@Overridepublic boolean handleSecurity(HttpServletRequest request, HttpServletResponse response) throws IOException {if (!request.getScheme().equals("https")) {response.sendError(HttpServletResponse.SC_FORBIDDEN);return false;}if (request.getHeader("Authorization") == null) {response.sendError(HttpServletResponse.SC_UNAUTHORIZED);return false;}if (authenticated(request)) {return true;} else {response.sendError(HttpServletResponse.SC_UNAUTHORIZED);return false;}}

而已。 現在,在注冊Servlet時傳遞該對象,

httpService.registerServlet(alias, new MyServlet(), initParams, new BasicAuthSecuredContext());

…并看到OSGI Servlet中基本身份驗證的強大功能!

參考: 在我們的JCG合作伙伴 Mackie Mathew的dev_religion博客上, 在OSGI環境中為Servlet實現Servlet的基本身份驗證 。


翻譯自: https://www.javacodegeeks.com/2012/06/servlet-basic-auth-in-osgi-environment.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/372576.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372576.shtml
英文地址,請注明出處:http://en.pswp.cn/news/372576.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux夏令時配置文件,Linux夏令時是怎么調整的?

以法國巴黎為例:root121 zoneinfo]# ln -s /usr/share/zoneinfo/Europe/Paris /etc/localtime[root121 zoneinfo]# date2015年 10月 13日 星期二 03:45:09 CEST[root121 zoneinfo]# date -RTue, 13 Oct 2015 03:45:31 0200[root121 zoneinfo]# zdump -v /etc/localt…

Kali Linux滲透基礎知識整理(二)漏洞掃描

Kali Linux滲透基礎知識整理系列文章回顧 漏洞掃描 網絡流量NmapHping3NessuswhatwebDirBusterjoomscanWPScan網絡流量 網絡流量就是網絡上傳輸的數據量。 TCP協議 TCP是因特網中的傳輸層協議,使用三次握手協議建立連接。當主動方發出SYN連接請求后,等待…

嵌入式軟件設計第09實驗報告

學號:140201133 姓名:李宇昕 組別:第3組 實驗地點:D19 一、實驗目的: 1.熟悉WWW技術中的SSI(Server Side Include)技術。 2.學會使用SSI技術編寫代碼把當前開發板內…

TeamCity工件:HTTP,Ant,Gradle和Maven

您可以通過幾種方式檢索TeamCity工件? 我說有很多選擇 ! 如果您使用的是Java構建工具,那么可以使用簡單的HTTP請求,Ant Ivy,Gradle和Maven下載和使用TeamCity構建配置生成的二進制文件。 怎么樣? 繼續閱讀…

linux中hadoop命令大全,hadoop常用命令

啟動Hadoop進入HADOOP_HOME目錄。執行sh bin/start-all.sh關閉Hadoop進入HADOOP_HOME目錄。執行sh bin/stop-all.sh1、查看指定目錄下內容hadoop dfs –ls [文件目錄]eg: hadoop dfs –ls /user/wangkai.pt2、打開某個已存在文件hadoop dfs –cat [file_path]eg:hadoop dfs -ca…

Uber從Postgres切換到MySQL

Uber工程師在官方博客上描述了他們為什么要從 Postgres 切換到 MySQL 數據庫。Uber的早期架構是由 Python編寫的后端應用構成,使用了 Postgres 數據庫。但此后,Uber的架構發生了顯著的改變,轉變到了微服務模型和新的數據平臺。以前他們使用 P…

AutoCAD如何方便截圖放到Word文檔,改成白底黑字

將模型視圖切換到布局2即可 比如下圖所示的效果 先回到模型視圖把所有線條顏色都改成白色,然后添加適當的標注(比如要受力分析,則在CAD中繪制箭頭也很方便的),文字說明。然后切換到布局2就OK 可以截圖了。 轉載于:http…

在Hotspot JVM中跟蹤過多的垃圾回收

由于內存泄漏或其他內存問題,經常導致應用程序凍結,僅使垃圾收集器(GC)進程運行失敗,試圖釋放一些空間。 直到看門狗(或沮喪的管理員)重新啟動應用程序并且問題從未解決之前,這種情況…

linux 網絡在線升級,linux在線升級

//前提信息:1.系統分區信息SPI-Flash:[0] 0x000000000000-0x000000020000 : "SPL,128KB"[1] 0x000000020000-0x0000000e0000 : "U-Boot,768KB"[2] 0x0000000e0000-0x000000100000 : "U-Boot Env,128KB"[3] 0x000000100000-0x00000020…

XML反序列化出錯,XML 文檔(2, 2)中有錯誤

XML轉換為實體類的錯誤處理方案 一.錯誤描述&#xff1a; XML反序列化出錯&#xff0c;XML 文檔(2, 2)中有錯誤二.解決方案&#xff1a; 在實體類的字段要加上XmlElement屬性三.具體實現: 1.XML文檔 <EVENT_INSTANCE><EventType>ALTER_TABLE</EventType><…

iOS--支付寶環境集成

1.下載支付寶SDK以及Demo https://doc.open.alipay.com/doc2/detail?treeId54&articleId103419&docType1 2.新建文件夾“AliSDK”&#xff0c;將壓縮包內的文件拷貝到該文件夾下&#xff0c;完成后如下圖所示&#xff1a; 3.將文件夾拷貝到項目中&#xff0c; 4.執行完…

再見,再見,5 * 60 * 1000 //五分鐘,再見,再見

在這篇文章中&#xff0c;我將討論一個在1.5版中首次引入的類&#xff0c;我使用了太多&#xff0c;但是與一些人交談&#xff0c;他們說他們不知道它的存在。 此類是TimeUnit 。 TimeUnit類表示給定粒度單位的持續時間&#xff0c;還提供了轉換為不同單位的實用方法以及執行計…

windows如何調用Linux的API,Windows和Native API中的系統調用?

最近&#xff0c;我在* NIX操作系統中使用了很多匯編語言。我想知道Windows域。Linux中的調用約定&#xff1a;mov $SYS_Call_NUM, %eaxmov $param1 , %ebxmov $param2 , %ecxint $0x80而已。這就是我們應該如何在Linux中進行系統調用。linux中所有系統調用的參考&#xff1a;關…

maven生命周期和插件

maven生命周期和插件 生命周期 maven的生命周期有三套&#xff0c;互相獨立。每個生命周期含有不同階段&#xff0c;常用如下 clean 清理項目 pre-clean 執行清理前需要完成的工作clean 清理上一次構建生成的文件post-clean 執行清理后需要完成的工作default 構建項目 validate…

Java EE 6測試第二部分– Arquillian和ShrinkWrap簡介

在Java EE 6測試的第一部分中&#xff0c;我簡要介紹了使用Glassfish嵌入式容器的EJB 3.1 Embeddable API&#xff0c;以演示如何啟動該容器&#xff0c;如何在項目類路徑中查找bean以及運行非常簡單的集成測試。 這篇文章重點介紹Arquillian和ShrinkWrap以及為什么它們是用于企…

linux內存分配堆棧數據段代碼段,linux – LD_PRELOAD堆棧和數據段內存分配

你好,我正在編寫一個Linux模塊(基于名為“Ccontrol”的GitHub項目)來創建緩存分區(a.k.a頁面著色),以減輕定時側通道攻擊(用于防止Prime Probe等攻擊).我已經使用LD_PRELOAD系統env變量來覆蓋所有malloc(),calloc()和free()調用,并用顏色感知調用替換它們.現在我正在尋找顏色堆…

【騰訊Bugly干貨分享】Android內存優化總結實踐

本文來自于騰訊Bugly公眾號&#xff08;weixinBugly&#xff09;&#xff0c;未經作者同意&#xff0c;請勿轉載&#xff0c;原文地址&#xff1a;https://mp.weixin.qq.com/s/2MsEAR9pQfMr1Sfs7cPdWQ 導語 智能手機發展到今天已經有十幾個年頭&#xff0c;手機的軟硬件都已經發…

以編程方式向OpenJPA注冊實體類型

我剛剛開始為Isis開發 OpenJPA對象庫 。 在一般情況下&#xff0c;可以在persistence.xml文件中注冊實體類型。 但是&#xff0c;Isis是一個框架&#xff0c;可以構建自己的元模型&#xff0c;并且可以自行確定哪些類構成實體。 因此&#xff0c;我不想強??迫開發人員重復自己…

linux redis客戶端,Redisson 3.4.0和2.9.0發布,Redis客戶端

Redisson 3.4.0和2.9.0發布&#xff0c;Redis客戶端發布時間:2017-04-27 09:12:16來源:紅聯作者:baihuoRedisson于2017年4月26日發布了3.4.0和2.9.0版本Redisson是架設在Redis基礎上的一個Java駐內存數據網格(In-Memory Data Grid)。充分的利用了Redis鍵值數據庫提供的一系列優…

LeetCode 349 Intersection of Two Arrays

Given two arrays, write a function to compute their intersection. Example: Given nums1 [1, 2, 2, 1], nums2 [2, 2], return [2]. 思路&#xff1a; 利用ArrayList的contains(Object o)方法進行交集的查詢。 解法&#xff1a; 1 import java.util.ArrayList;2 3 publi…