idea中使用osgi_OSGi环境中的Servlet基本身份验证
idea中使用osgi
您首先需要獲得對(duì)OSGI HTTP Service的引用。 您可以通過(guò)聲明性服務(wù)來(lái)做到這一點(diǎn)。 這篇文章將集中在獲得對(duì)HTTP服務(wù)的引用之后的步驟。 注意:此職位的完整課程位于此處通過(guò)OSGI HTTP Service注冊(cè)Servlet時(shí),它為您提供了提供HTTPContext實(shí)現(xiàn)的選項(xiàng)。
httpService.registerServlet(alias, new MyServlet(), initParams, null);
當(dāng)我們實(shí)現(xiàn)HTTPContext接口時(shí),我們可以實(shí)現(xiàn)三種方法。 在為ermmm請(qǐng)求之前,將調(diào)用這三(3)個(gè)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;} }因此,在實(shí)現(xiàn)此功能時(shí),我從OSGI HTTPContext文檔和HTTP Authentication spec中借用了很多內(nèi)容。 如果您有興趣學(xué)習(xí)很多東西,深入研究細(xì)節(jié)等內(nèi)容,則必須閱讀它們。或者您可以閱讀本文的其余部分。
首先,除非使用https,否則基本認(rèn)證非常重要。 如果不存在,我們會(huì)讓用戶知道它是禁區(qū)。 讓我們繼續(xù)做。
if (!request.getScheme().equals("https")) {response.sendError(HttpServletResponse.SC_FORBIDDEN);return false; }接下來(lái),讓我們檢查Authorization標(biāo)頭。 如果那不在那里,我們會(huì)讓他們知道,他們需要那種東西才能在那里。 或者我們只是說(shuō)他們是未經(jīng)授權(quán)的。 現(xiàn)在開(kāi)始吧。
if (request.getHeader("Authorization") == null) {response.sendError(HttpServletResponse.SC_UNAUTHORIZED);return false; }好的,兩項(xiàng)測(cè)試通過(guò)了。 現(xiàn)在,我們做一些實(shí)際的工作。 讓我們提取標(biāo)頭以對(duì)其進(jìn)行解碼,然后執(zhí)行“不太正確”的身份驗(yàn)證。
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方法中。 請(qǐng)注意,當(dāng)安全性失敗時(shí),如何將有意義的錯(cuò)誤消息設(shè)置為響應(yīng)(第14行)。 這樣可以防止用戶猜測(cè),并且他們知道出了什么問(wèn)題。 Ermm,至少,如果他們知道HTTP錯(cuò)誤代碼,他們將確切知道出了什么問(wèn)題。
@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;}}而已。 現(xiàn)在,在注冊(cè)servlet時(shí)傳遞該對(duì)象,
httpService.registerServlet(alias, new MyServlet(), initParams, new BasicAuthSecuredContext());…并看到OSGI Servlet中基本身份驗(yàn)證的強(qiáng)大功能!
參考: 在我們的JCG合作伙伴 Mackie Mathew的dev_religion博客上, 在OSGI環(huán)境中為Servlet實(shí)現(xiàn)Servlet的基本身份驗(yàn)證 。
翻譯自: https://www.javacodegeeks.com/2012/06/servlet-basic-auth-in-osgi-environment.html
idea中使用osgi
總結(jié)
以上是生活随笔為你收集整理的idea中使用osgi_OSGi环境中的Servlet基本身份验证的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: 如何使用命令行生成高强度密码
- 下一篇: 智邦国际ERP系统31.87版本升级更新
