Jespa实际运用的一点心得

news/2023/9/28 18:29:24

  最近在项目中遇到一个需求,此需求场景就是:当用户登录了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死循环了。感觉还有很多东西要说,但是有些东西只能意会不能言传,自己动手做了才会有了感觉。就这样吧,心情不太好,唉。

http://www.cnblogs.com/willibe/p/4069773.html 

 

转载于:https://www.cnblogs.com/willibe/p/4069773.html


https://dhexx.cn/news/show-17994.html

相关文章

免费素材:气球样式的图标集(PSD, SVG, PNG)

本地下载 一套30枚设计精良的气泡式圆形图标,两种款式供您选择,相信你会喜欢! 转载于:https://www.cnblogs.com/gbin1/p/4071233.html

MySQL解决group by分组后未排序问题

MySQL解决group by分组后未排序问题一、遇见问题1、错误SQL2、正确SQL一、遇见问题 当我们要实现SQL分组后取第一条数据则需要进行排序结果作为子查询后分组 CREATE TABLE op_joke (id int(11) NOT NULL AUTO_INCREMENT,name1 varchar(255) DEFAULT NULL,name2 varchar(255) D…

卢沟桥石碑的奇幻之旅

手机拍照: ReCap 360 生成模型: http://recap360.autodesk.com 浏览器中无插件浏览: 转载于:https://www.cnblogs.com/junqilian/p/4076469.html

[CDH6.3.1搭建]-离线parcel源配置,cdh001节点通过apache部署离线parcel源

部署离线parcel源,就是hdfs,hive,hbase等应用的安装文件,parcel其实就是个tar.gz压缩包 注意: 1 sha1名称注意,重命名去掉1,不然在部署过程CM认为文件下载未完整,会持续下载 2 目录不要变,切记 mkdir -p /v…

MongoDB最新版6.0.3版本下载设置密码以及可视化插件

MongoDB下载以及可视化插件一、MongoDB下载安装教程(Windows)1、安装步骤2、配置3、启动4、配置环境变量二、下载shell命令工具四、设置密码1、理解Admin数据库2、角色与权限3、MongoDB权限:4、创建用户管理员5、查询删除用户2、第二步3、第三…

SpringBoot简单使用MongoDB

SpringBoot简单使用MongoDB一、配置步骤1、application.yml2、pom3、entity4、mapper二、案例代码使用1、库前期准备上一篇安装MongoDB地址http://t.csdn.cn/G4oYJ 一、配置步骤 进入mongodb中创建数据库和用户 # (1)授权 # 我的管理员是root&#xf…

[CDH6.3.1集群搭建] 通过CM 从零开始安装 和设置 cm server,部署CDH集群

首先确保以下步骤都成功进行,没有特别说明的话,集群中每个节点都要执行以下的步骤linux系统为 Centos 7.2,CDH的版本6.3.1 以下是官网下载的文件说明 CM: cm6.3.1-redhat7.tar.gz CDH Parcel(hive,hbase,hdfs等): CDH-6.3.1-1.cdh6.3.1.p0.…

(九)打印机驱动设置—USB接口的设置

USB接口的打印机有两种,一种为UTP,就是直接的USB接口打印,市面上绝大部分是这一种。一种为虚拟串口。就是USB当串口使用。下面介绍这两种方式的驱动设置。 一、USB虚拟串口打印机。 以GP58N为例,这一款是虚拟串口打印机&#xff0…

Xcode/iOS: 如何判断代码运行在DEBUG还是RELEASE模式下?

原帖链接:http://stackoverflow.com/a/9063469 首先确定下项目的 Build Settings 是否已经设置过宏定义 DEBUG,如何看呢? 点击 Build Settings ,然后在搜索框里输入‘macros’ 如果已经设置过,在 Preprocessor Macros …

学习MongoTemplate操作MongoDB增删改查

学习MongoTemplate操作MongoDB增删改查一、准备1、依赖2、yml3、实体类二、案例1、增2、删3、改4、查4.1、根据Id查询数据4.2、条件查询方法4.3、模糊查询4.4、分页查询一、准备 1、依赖 <dependency><groupId>org.springframework.boot</groupId><artif…