idea中使用osgi

您首先需要获得对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

idea中使用osgi

idea中使用osgi_OSGi环境中的Servlet基本身份验证相关推荐

  1. OSGi环境中的Servlet基本身份验证

    您首先需要获得对OSGI HTTP Service的引用. 您可以通过声明性服务来做到这一点. 这篇文章将集中在获得对HTTP服务的引用之后的步骤. 注意:此职位的完整课程位于此处 通过OSGI HT ...

  2. window中搭建jenkins_Windows环境中的jenkins构建时报错

    按照第三章的讲解进行安装配置后,最后尝试连接进行验证时,可以走通.但是到第五章实际实现自动化部署任务时,按照课程的讲解配置完后,构建时报错:Started by user adminRunning a ...

  3. 在 Kubernetes 中使用 Keycloak OIDC Provider 对用户进行身份验证

    API Server 作为 Kubernetes 的网关,是用户访问和管理资源对象的入口.对于每个访问请求, API Server 都需要对访问者的合法性进行检查,包括身份验证.权限验证等等.Kube ...

  4. java ldap操作实例_Java Spring Security示例教程中的2种设置LDAP Active Directory身份验证的方法...

    java ldap操作实例 LDAP身份验证是世界上最流行的企业应用程序身份验证机制之一,而Active Directory (Microsoft为Windows提供的LDAP实现)是另一种广泛使用的 ...

  5. Java Spring Security示例教程中的2种设置LDAP Active Directory身份验证的方法

    LDAP身份验证是全球范围内最流行的企业应用程序身份验证机制之一,而Active Directory (Microsoft针对Windows的LDAP实现)是另一种广泛使用的LDAP服务器. 在许多项 ...

  6. LaTeX 中 align 公式环境中插入中文的两种方法

    \begin{align}\text { 且 } \mbox {公式中的中文} % mybox \end{align}

  7. java中mkdirs_java – 多线程环境中的mkdirs()函数

    我正在创建文件和文件夹树.我正在改写多线程.我看到的唯一弱点是创建文件夹时.现在它一个接一个(深入).在我写下文件之前,我会检查路径是否存在.如果没有,我使用mkdirs来创建所有缺失的东西. pub ...

  8. [第二篇]如何在ASP.Net Core的生产环境中使用OAuth保护swagger ui

    在我上篇文章如何在ASP.Net Core的生产环境中保护swagger ui中,我们讨论了如何使用基本身份验证来保护 swagger ui. 使用 OAuth 2.0 和 OpenIdConnect ...

  9. 在Intranet环境中保护.NETWeb应用程序方案(转)

    Microsoft Corporation 内容简介 基于 Intranet Web 应用程序的安全性并不是不重要,因为它存在于许多控制网络中,并且对一个限制集合中的用户是可以访问的.不同个体和部门可 ...

最新文章

  1. idea配置jfinal_Jfinal 项目在idea上创建
  2. 网页中如何启用QQ交谈
  3. 关于python中多态的理解。
  4. python进阶(小白也能看懂)——装饰器浅谈(一)
  5. matlab生产计划问题,用MATLAB解决综合生产计划编制过程中的优化问题
  6. 【APICloud系列|37】百度开放平台应用+,提升用户下载量操作步骤
  7. 前端学习(2236):react的列表渲染二
  8. 20172318 2018-2019-1 《程序设计与数据结构》第9周学习总结
  9. android intent跳转声音,android intent 跳转
  10. Javascript快速排序
  11. php中常用的字符串获取函数mb_strcut实例解释
  12. 开始学习 PixiJS
  13. php 怎么输入php ini,PHP怎么找到php.ini配置文件?-php教程
  14. LeetCode—4.滑动窗口
  15. 【数据库】数据库系统工程师(软考中级)——学习过程总结
  16. 动环监控系统的监控对象有哪些?动环监控系统作用
  17. java file 的length_java里怎么知道一个file的大小?
  18. AJAX+Servlet实现客户端无刷新请求服务器实践
  19. //苏嵌//张朋//2018.07.11
  20. AD之PCB各层说明

热门文章

  1. Java中创建String的两道面试题及详解
  2. ssm使用全注解实现增删改查案例——Dept
  3. python菱形画法解释_用Python画棱形
  4. 修改打印机ip工具_使用富士施乐一体机因动态IP导致不能打印与扫描的解决方法...
  5. (转)构建微服务:Spring boot 入门篇
  6. 转:聊聊开发中幂等性问题(*)
  7. java数据库编程——事务
  8. 认证令牌_Java应用程序的简单令牌认证
  9. java批处理 异常处理_Java批处理教程
  10. 谷歌 recaptcha_在Spring Boot应用程序中使用Google reCaptcha