ldap java

在上一篇文章中,我们解释了如何在通过传输层安全性(TLS)/安全套接字层(SSL)传输数据时保护数据。 现在让我们尝试了解如何为使用LDAP服务器进行身份验证的基于JEE 6的Web应用程序应用安全机制。

目的:

•在JEE应用服务器中配置LDAP领域
•将JEE安全性应用于示例Web应用程序。

使用的产品:

  • IDE:Netbeans 7.2
  • Java开发工具包(JDK):版本6
  • Glassfish服务器:3.1
  • 身份验证机制:基于表单的身份验证
  • 验证服务器:LDAP OpenDS v2.2

将JEE安全性应用于示例Web应用程序:

可以通过声明性安全性或程序性安全性来保护JEE Web应用程序。

声明式安全性可以通过使用批注或通过部署描述符在JEE应用程序中实现。 如果角色和身份验证过程很简单,并且可以利用现有的安全提供程序(甚至包括LDAP,Kerberos之类的外部安全提供程序),则可以使用这种类型的安全性机制。

当声明性安全对于上下文中的应用程序来说不够时, 程序安全性提供了附加的安全性机制。 当我们需要定制的安全性并需要丰富的角色集时,需要使用它。

在Glassfish应用程序服务器中配置领域

在我们在Glassfish应用程序服务器中配置领域之前,您需要安装和配置将用于项目的LDAP服务器。 您可以在以下文章中获得完整的说明:“ 如何安装和配置LDAP服务器 ”。
安装成功后,启动您的Glassfish服务器并转到管理控制台。 创建一个新的LDAP领域。

创建新的LDAP领域

根据为LDAP服务器完成的配置添加配置设置。

Glassfish Web应用程序LDAP领域

JAAS上下文–标识符,将在应用程序模块中用于与LDAP服务器连接。 (例如ldapRealm)
目录– LDAP服务器URL路径(例如ldap:// localhost:389)
基本DN:LDAP目录中的专有名称,用于标识用户数据的位置。 将JEE安全性应用于Web应用程序 按照以下结构创建示例Web应用程序:

SampleWebApp目录

基于表单的身份验证机制将用于用户身份验证。

JEE登录和身份验证

让我们借助上面的图和代码来解释整个过程。

在Netbeans IDE中设置一个示例Web应用程序。

Netbeans IDE中的SampleWebApp

SampleWebApp配置

第1步:

如上图所示,客户端浏览器尝试从http:// {samplewebsite.com} / {contextroot} /index.jsp网站请求受保护的资源。 Web服务器进入Web配置文件,并确定请求的资源受到保护。

web.xml

<security-constraint><display-name>SecurityConstraint</display-name><web-resource-collection><web-resource-name>Secured resources</web-resource-name><url-pattern>/*</url-pattern></web-resource-collection><auth-constraint><role-name>GeneralUser</role-name><role-name>Administrator</role-name></auth-constraint><user-data-constraint><transport-guarantee>NONE</transport-guarantee></user-data-constraint>
</security-constraint>

第2步:

Web服务器将Login.jsp作为基于表单的身份验证机制的一部分提供给客户端。 这些配置是从Web配置文件中检查的。

web.xml

<login-config><auth-method>FORM</auth-method><realm-name>ldapRealm</realm-name><form-login-config><form-login-page>/Login.jsp</form-login-page><form-error-page>/LoginError.jsp</form-error-page></form-login-config>
</login-config>

第三步:

客户端将登录表单提交到Web服务器。 当服务器发现表单操作为“ j_security_check”时,它将处理请求以认证客户端的凭据。 jsp表单必须包含登录元素j_username和j_password,这将允许Web服务器调用登录身份验证机制。

Login.jsp

<form action="j_security_check" method=post><p>username: <input type="text" name="j_username"></p><p>password: <input type="password" name="j_password"></p><input type="submit" value="submit"><input type="reset" value="Reset">
</form>

由于在登录配置中使用了LDAP领域,因此在处理请求时,Web服务器会将身份验证请求发送到LDAP服务器。 LDAP服务器将根据LDAP存储库中存储的用户名和密码对用户进行身份验证。

第4步:

如果身份验证成功,则将安全资源(在本例中为index.jsp)返回给客户端,并且容器使用会话ID来标识客户端的登录会话。 容器使用包含会话ID的cookie维护登录会话。 服务器将此Cookie发送回客户端,并且只要客户端能够为后续请求显示此Cookie,容器就可以轻松识别客户端并因此维护该客户端的会话。

步骤5:

仅当身份验证失败时,才会按照web.xml中的配置将用户重定向到LoginError.jsp。

<form-error-page>/LoginError.jsp</form-error-page>

这显示了如何将基于表单的安全认证应用于示例Web应用程序。 现在让我们简要了解一下用于该项目的安全资源。 在此项目中,受保护的资源是index.jsp,它接受用户名并将请求转发到LoginServlet。 登录Servlet将请求分派到Success.jsp,然后将用户名打印到客户端。

index.jsp

<body><h2>Please type your name</h2><form method="POST" action="LoginServlet"><input type="text" name="username" size="25"><p></p><input type="submit" value="Submit"><input type="reset" value="Reset"></form></body>

LoginServlet.java

protected void processRequest(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();try {RequestDispatcher requestDispatcher = getServletConfig().getServletContext().getRequestDispatcher("/Success.jsp");requestDispatcher.forward(request, response);} finally {out.close();}}

Success.jsp

<body><h1>You have been successfully logged in as ${param.username}</h1>
</body>

Web.xml

<servlet><servlet-name>LoginServlet</servlet-name><servlet-class>com.login.LoginServlet</servlet-class></servlet><servlet-mapping><servlet-name>LoginServlet</servlet-name><url-pattern>/LoginServlet</url-pattern></servlet-mapping>

您可以从以下链接下载完整的工作代码:

  • SampleWebApp代码下载
参考:来自Idiotechie博客的JCG合作伙伴 Mainak Goswami的使用LDAP的Java EE6安全Web应用程序 。

翻译自: https://www.javacodegeeks.com/2013/05/secure-web-application-in-java-ee6-using-ldap.html

ldap java

ldap java_使用LDAP保护Java EE6中的Web应用程序相关推荐

  1. 使用LDAP保护Java EE6中的Web应用程序

    在上一篇文章中,我们解释了如何在通过传输层安全性(TLS)/安全套接字层(SSL)传输数据时保护数据. 现在,让我们尝试了解如何为使用LDAP服务器进行身份验证的基于JEE 6的Web应用程序应用安全 ...

  2. 在 ASP.NET 2.0 中创建 Web 应用程序主题(一)

    在ASP.net2.0中创建Web应用程序主题 来源:MSDN 适用范围: MicrosoftASP.NET2.0 MicrosoftVisualStudio2005 摘要:StephenWalthe ...

  3. 解决ios系统在safari浏览器中添加web应用程序到主屏幕,打开子链接会跳转到safari的问题

    解决ios系统在safari浏览器中添加web应用程序到主屏幕,打开子链接会跳转到safari的问题 前言 ios系统的safari浏览器有一个功能可以将web应用程序添加到主程序,使得web程序像a ...

  4. java web应用程序_说说Java Web中的Web应用程序|乐字节

    大家好,我是乐字节的小乐,今天接着上期文章<Javaweb的概念与C/S.B/S体系结构>继续往下介绍Java Web ,这次要说的是web应用程序. 1. Web 应用程序的工作原理 W ...

  5. r语言中的shiny教程_如何使用Shiny在R中编写Web应用程序

    r语言中的shiny教程 新年快乐! 这个月我忙于撰写一些较大的文章,因此请在接下来的几周内查找这些文章. 对于本月的Nooks和Crannies,我想简要指出一个我一直在用它进行自我教育的出色R库. ...

  6. linux web放在哪个文件夹下,Linux中的Web应用程序应该放在哪里?

    以下是Linux发行版的文件结构示例: https://www.centos.org/docs/5/html/Deployment_Guide-en-US/s1-filesystem-fhs.html ...

  7. 魔法java_可别在Java代码中写那么多魔法值了

    1. 前言 重构老代码中遇到了不少类似下面这种写法: public void attend(String value) { if ("0".equals(value)) { //t ...

  8. java句子中找单词_java程序找到一个句子中每个单词的字母数

    我想找到一个句子中每个单词的字母数.我已经尝试了几次使用几个代码,但从来没有得到它.我总是显示错误StringIndexOutOfBounds异常.我的一个代码如下:java程序找到一个句子中每个单词 ...

  9. 使用Gradle禁止Java和Spring Boot Web应用程序中的FindBugs警告

    如何在+ Spring Boot和+ Java应用程序中使用注释抑制FindBugs警告 如果您的构建由于FindBugs问题而中断,并且是假阳性,或者由于其他考虑而无法解决问题,则可以添加注释来忽略 ...

最新文章

  1. ajax校验用户名可用吗,基于jQuery实现Ajax验证用户名是否可用实例
  2. 点在平面上的投影坐标例题_光测力学-栅线投影(面结构光)技术
  3. 凝思操作系统启动盘制作_实用!如何快速制作U盘启动盘并且重装系统
  4. 如何让你的webapp也能跳窗口搜索
  5. 2020最新直播源地址下载txt_TXT追书免费小说app安卓版下载-TXT追书免费小说最新版下载v5.0.0...
  6. canvas笔记-lineTo()与moveTo()的区别
  7. Django xadmin引入DjangoUeditor
  8. 函数声明和函数表达式
  9. 去中心化索引协议The Graph将于12月上线主网
  10. 在线音视频时代来临!
  11. vs的离线下载.iso文件_Windows10官方纯净系统下载
  12. python实现通讯录的增删改查_python实现数据库增删改查
  13. 清华大学操作系统OS学习(三)——启动、中断、异常和系统调用
  14. 广西(柳州)创建国家级车联网先导区建设方案
  15. linux中iptable和firewalld详解
  16. AXI总线,AXI_BRAM读写仿真测试
  17. AI:大力出奇迹?Bigger is better?AI下一代浪潮?—人工智能的大语言模型(LLMs)/预训练大模型的简介、发展以及未来趋势
  18. 好太太亮相综艺《阳光姐妹淘》,种草青年生活新方式
  19. Chrome浏览器双击无反应
  20. paddlenlp二分类引入评估召回率F1指标 paddle.metric Accuracy

热门文章

  1. 2017西安交大ACM小学期数论 [等差数列]
  2. mybatis example处理and、or关系的方法
  3. 深入Java集合系列之五:PriorityQueue
  4. Oracle入门(五)之基本命令操作
  5. HashMap 和 HashTable 到底哪不同 ?
  6. Maven精选系列--POM文件解析
  7. 漫画:什么是布隆算法
  8. 【Servlet】获取并输出服务器获得的数据
  9. Vue.js基础体验(一)
  10. springboot创建项目