最近在项目中遇到一个需求,此需求场景就是:当用户登录了windows,若用户用的AD域账号登录,则用IE浏览器打开应用系统时,则不必再输入账号和密码,自动登录到系统。简单滴说,就是应用系统与AD域进行单点。

经过搜索得知,可以知道,HTTP协议中有个401状态表示当前用户未授权(401 Unauthorized),当要求用NTML方式提供用户信息时,IE浏览器会自动获取当前windows账户(前提是要浏览器勾选了“自动使用当前用户名和密码登陆”),服务器获取后将此信息向域服务器进行验证并返回登陆状态信息。

以上就是要实现的单点的原理。

那我们现在来看看,如果要实现这个需求,都有哪些方案。

1.人工获取到当前windows账户信息,然后应用服务器向域服务器进行验证;

此方案比较棘手的是要怎么获取到windows账户信息呢?可能账户名还比较容易获取,但是密码就别想微软会明文提供给你了。

2.利用现成的IIS服务器做中介,在用户登录应用服务器的时候,通过IIS服务器进行登录验证,然后根据其返回的信息进行登录处理;

此方案是行得通的,比较婉转,不那么雅观,这里就不多说了。

3.利用第三方的开源项目jcifs。

jcifs是运用的最多的。但是它有个缺点就是:不支持NTLM2协议。而windows vista或7以上的系统都是默认采用NTLM2协议的,而目前用户也都是windows7以上的操作系统,因此这个方案也比较纠结。最终,有了下面的方案。

4.利用有限制的Jespa。

这个是可以免费使用的,支持NTLM2协议,但是呢不开源也有license限制。

在这里Jespa我们只做研究,不做其它目的,方便大家学习交流。因为这个在网络上介绍的太少了。

那么从官网下载Jespa包后,里面会包含技术文档和一些使用例子。根据技术文档的介绍,我们可以一步一步进行操作,体验下它的提供的功能。

一、环境的搭建。

首先是要搭建AD域的环境,这个请谷歌。比较简单,但是要注意的是同时也要安装DNS服务,不然后面利用jespa提供的脚本进行创建的计算机账户会不成功。搭建好后,就可以找一台机器来加入这个AD域,如能成功加入这个域,则搭建成功。

二、利用jespa提供的脚步创建计算机账户。

目的原话是这样说的:

“to authenticate clients using NTLM such as with the HttpSecurityService (or HttpSecurityFilter),

SaslServer, or JAAS LoginModule, a Computer account must be created in Active Directory with a known

password as described in this section”

不过我们也可以不需要利用它提供的脚步进行创建,我们也可以手工创建一个出来,但是呢,手工创建的是不会有密码的,因此,手工创建完后还是需要利用它提供的脚步来创建密码。利用它脚本来进行创建有个好处就是:按照它的提示一步一步进行,最后它会自动生成一份配置文档给你。这份配置是后面项目的运行需要用到的。

三、配置如下所示:

#此处可采用的Provider包括(默认为NtlmSecurityProvider):NtlmSecurityProvider,LdapSecurityProvider,ChainSecurityProvider,WordPressSecurityProvider

provider.classname=jespa.ntlm.NtlmSecurityProvider

#以下user和pwd,当登陆采用Form Login时,才需要配置。如SSO采用IE内置弹出窗口,可不配置。

http.parameter.username.name=username

http.parameter.password.name=password

#当URL请求中,包含参数logout=1时,将删除会话,退出系统。

#例如:https://as1.busicorp.local/account/login?logout=1

http.parameter.logout.name =logout

#http.parameter.anonymous.name=anon

#当登陆验证失败或异常时,将转向该页面。该路径需包含工程名。

fallback.location= /login.jsp

#哪些页面不进入jespa filter/login.jsp,

excludes= /logout.jsp,/logoutConfirm.jsp,/resource/*#groups.allowed = BUSICORP\\Domain Admins

#

# NtlmSecurityProvider properties

#

#jespa.log.path 该路径经测试,必须为绝对路径。与工程路径无关

jespa.log.path = c://jespa.log

#jespa.log.level 3以上信息为Debug状态,如发布后需修改为1

jespa.log.level = 4

jespa.account.canonicalForm = 3

# Replace the following with properties determined in Step 1 of Installation

##域名

jespa.bindstr = test.com

jespa.domain.netbios.name = test

#可执行DNS解析Server IP

#jespa.dns.servers = 192.168.15.110,192.168.15.115

#jespa.dns.site = Paris

##以下帐号必须为Computer Account,而非普通User。可在AD Server,用jespa中的SetupWizard.vbs创建。由于AD不熟悉,其他方式不知如何创建

##注意创建Account时,无$ 此处配置必须有$

# Generated by the Jespa Setup Wizard from IOPLEX Software on 2014-10-28

#jespa.bindstr = testoa.com

jespa.dns.servers = 192.168.92.135

jespa.dns.site = Default-First-Site-Name

jespa.service.acctname = jespa1$@test.com

jespa.service.password = pej~43juz-83

四、利用它提供的web应用,进行测试

只要配置及Filter正确,运行后即可自动登录到域验证,并返回你的账户信息,根据它提供的账户名,就可以利用这个账户名来在自己的应用系统里面单点,很简单的。

五、一些需求定制

当然了,能自动登录是基本功能。但是如果有些用户不是域用户怎么办?这时候如果你不是域用户,则会弹出微软的验证框来进行账户信息填写。但是问题还是会存在的,因为你可能根本不是域用户,是应用系统里面的一个特殊用户,那么,这个就得利用应用系统本身提供的验证框架了。一直不消失的验证框很是让人蛋疼。因此,可以在其代码做一点定制让其若果不是域用户则跳转回应用系统本身的验证页面(不需要那么复杂,具体看配置文件的fallback.location注释)。

特别注意的是,配置参数需要特别严谨,小心别让Filter死循环了。感觉还有很多东西要说,但是有些东西只能意会不能言传,自己动手做了才会有了感觉。就这样吧,心情不太好,唉。

java jespa_Jespa实际运用的一点心得相关推荐

  1. java学不下去能学web安全吗,这半年学习 Web 安全的一点心得体会

    原标题:这半年学习 Web 安全的一点心得体会 来自公众号: 信安之路 大家好,我是 Mirror(王宇阳),专科在读的大二学生:接触信安时间不长,大佬多多指教.信安之路成长平台网站开放后我就在双十一 ...

  2. java听课心得体会,Java初步学习的一点心得体会

    从2015年9月份开始接触到java语言,一开始学习并不上心,而且一直在找自学资源,在没有大牛带的情况下,一直拖到2016年3月份,正式开启了我的java自学之路,现在的我还处在刚入门阶段,谈谈自己学 ...

  3. java百里守约代码_玩百里守约的一点心得

    最近在练百里守约,并且玩得越来越好,为了在技艺生疏之后能重回巅峰,给未来的自己写下一点心得. 一提到这个英雄,大家第一时间想到的肯定是二技能. 二技能是一个好的百里守约玩家的基本操作,首先是蹲在草丛时 ...

  4. 谈谈选用技术的原则,技术学习方法技巧,阅读代码的技巧及其它 MSF的一点心得...

    谈谈技术原则,技术学习方法,代码阅读及其它(正文) 这篇文章是前一阵在水木BBS上和别人讨论中偶自己发言的摘编,是偶这几年开发过程完全经验式的总结.完全个人经验,供批判. 一.选用技术的原则 比较规范 ...

  5. 转载tangl_99的Servlet 实现文件上传下载--自己的一点心得

    这个周末终于可以好好锻炼一下我的IBM ThinkPad T43了.今天看了一些关于JSP,Servlet方面的资料,写了简单的两个JavaBean.一个是UpLoad,一个是DownLoad.写得很 ...

  6. 新手网站推广邮件群发一点心得

    关于邮件群发一点心得 请勿见笑,本人新人啊.新人做法还是比较菜的.说一下邮件群发吧.最近本人下软件不下百次.病毒木马电脑已经是满满一箩筐了,幸好是虚拟机里. 首先收集相关邮件地址这里转一篇文章 营销如 ...

  7. mysql数据库管理系统模式_MYSQL命令行模式管理MySql的一点心得

    MYSQL命令行模式管理MySql的一点心得 MYSQL命令行模式管理MySql的一点心得 MySql数据库是中小型网站后台数据库的首选,因为它对非商业应用是免费的.网站开发者可以搭建一个" ...

  8. 将asp.net1.1的应用程序升级到asp.net2.0的一点心得

    将asp.net1.1的应用程序升级到asp.net2.0的一点心得 费了好一袋烟工夫把CommunityServer升级到了Asp.Net2.0平台,一点心得: vs2005可以很方便的帮我们把vs ...

  9. 使用Webbrowser的一点心得体会

    使用Webbrowser的一点心得体会 原文:使用Webbrowser的一点心得体会 自从用上VS2005后,发现多了个WebBrowser控件(.net 2003中不带),为图方便吧,有好多小工具就 ...

最新文章

  1. 在CentOS 6.3 64bit上使用 smartmontools和MageCli 监测硬盘的健康状态
  2. python的文件式如何操作_Python文件操作
  3. mysql gtid ha_MySQl新特性 GTID
  4. SQL实现split函数,自定义分割字符,自定义取出第几个分割字符前的字符串
  5. [论文阅读] Automatic Polyp Segmentation via Multi-scale Subtraction Network
  6. 基于URL的轻量级恶意页面检测分类器
  7. 乌班图Linux程序自动启动,通过update-rc.d来管理Ubuntu系统的自动启动程序
  8. 汽车级485通信电路
  9. matlab sym是什么意思,SYM是什么意思 sym是什么意思
  10. vue.js 动态合并单元格问题
  11. 网络语言上多个C是什么意思,今年流行的网络用语,个个都很有意思,你知道几个呢?...
  12. python常见运算符
  13. 百练 2809 计算2的N次方
  14. 在家赚钱,收藏好这三个兼职
  15. linux 下oracle11g卸载干净,linux系统Oracle11g R2完整卸载教程
  16. 【闲谈】应聘时要问HR的7个问题
  17. 【C语言程序】输入一个字符串,将其反转并输出
  18. 云班课大学计算机基础答案,《大学计算机基础》期末考试题目
  19. Strassen矩阵乘法(C++)
  20. 中国第一台量子计算机诞生 中国军工尖端技术取得重大突破

热门文章

  1. 【原创】自己编写的JavaGUI一键生成(hibernate/spring/mvc/maven)工具(附带视频教程源码)...
  2. 1436. 旅行终点站
  3. leetcode1415. 长度为 n 的开心字符串中字典序第 k 小的字符串(回溯)
  4. leetcode109. 有序链表转换二叉搜索树(深度优先搜索/快慢指针)
  5. sql limit子句_SQL子句解释的位置:之间,之间,类似和其他示例
  6. 组件分页_如何创建分页组件
  7. slack 使用说明_我如何使用Node和Botkit构建HR Slack Bot
  8. 数据库数据过长避免_为什么要避免使用商业数据科学平台
  9. mysql学习笔记-insert扩展
  10. get与post区别