java jespa_Jespa实际运用的一点心得

最近在项目中遇到一个需求,此需求场景就是:当用户登录了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.mzph.cn/news/399197.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

webstorm 代码提示

1、vue语法提示 设置 – Inspections – HTML – Unknown HTML tags,添加customs v-text     v-html     v-once     v-if     v-show     v-else     v-for     v-on     v-bind     v-model     v-ref     v-el   …

Atitit. 提升软件开发效率and 开发质量---java 实现dsl 4gl 的本质and 精髓 O725

Atitit. 提升软件开发效率and 开发质量---java 实现dsl 4gl 的本质and 精髓 O725 1. DSL主要分为三类:外部DSL、内部DSL,以及语言工作台。 1 2. DSL规则 2 2.1. DSL 整洁的代码 2 2.2. DSL必须以文本代码的形式出现 2 2.3. DSL的语法应该尽可能地接近…

java tcp 监听端口_【TCP/IP】端口未监听,还能访问成功?

作者:Mr林_月生链接:https://www.jianshu.com/p/3ab10c8685b5现象直接上图可以发现,本地没监听50000端口的服务,但是尝试连接本地50000端口时,却能成功建立连接,这种现象叫做「自连接」。我们再通过netstat…

python随机生成定长字符串(转)

原文:http://www.oschina.net/code/snippet_153443_4752 运行结果: 转载于:https://www.cnblogs.com/Jollyxi/p/7992007.html

HDU 2204 Eddy's爱好(容斥原理)

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid2204 解题报告&#xff1a;输入一个n让你求出[1&#xff0c;n]范围内有多少个数可以表示成形如m^k的样子。 不详细说了&#xff0c;自己一开始也忽略了三个素数的乘积的乘方的情况。 1 #include<cstdio>2…

python 物理引擎 摩擦力_参赛作品2-phenom的2D物理引擎

全球图形学领域教育的领先者、自研引擎的倡导者、底层技术研究领域的技术公开者&#xff0c;东汉书院在致力于使得更多人群具备内核级竞争力的道路上&#xff0c;将带给小伙伴们更多的公开技术教学和视频&#xff0c;感谢一路以来有你的支持。我们正在用实际行动来帮助小伙伴们…

vue-cli的webpack模版,相关配置文件dev-server.js与webpack.config.js配置解析

1.下载vue-cli [html] view plaincopy npm install vue-cli -g vue-cli的使用与详细介绍&#xff0c;可以到github上获取https://github.com/vuejs/vue-cli 2.安装webpack项目模版 [html] view plaincopy vue init <template-name> <project-name> 比如&#xff…

zookeeper windows 下安装

2019独角兽企业重金招聘Python工程师标准>>> 前沿&#xff1a;最近公司做的项目用到了dubbo 和 zookeeper 由于 每次测试的时候 我本地的服务就会注册到测试机上&#xff0c;还得每次把测试机的服务停止掉&#xff0c;所以准备在本地搭建一个zookeeper。 安装过程 2…

小白学jquery Mobile《构建跨平台APP:jQuery Mobile移动应用实战》连载四(场景切换)...

作为一款真正有使用价值的应用&#xff0c;首先应该至少有两个页面&#xff0c;通过页面的切换来实现更多的交互。比如手机人人网&#xff0c;打开以后先是进入登录页面&#xff0c;登录后会有新鲜事&#xff0c;然后拉开左边的面板&#xff0c;能看到相册、悄悄话、应用之类的…

Mysql学习总结(12)——21分钟Mysql入门教程

21分钟 MySQL 入门教程 目录 一、MySQL的相关概念介绍二、Windows下MySQL的配置 配置步骤MySQL服务的启动、停止与卸载三、MySQL脚本的基本组成四、MySQL中的数据类型五、使用MySQL数据库 登录到MySQL创建一个数据库选择所要操作的数据库创建数据库表六、操作MySQL数据库 向表中…

java 队列实例_Java 实例 - 队列(Queue)用法

全屏Java 实例 - 队列(Queue)用法队列是一种特殊的线性表&#xff0c;它只允许在表的前端进行删除操作&#xff0c;而在表的后端进行插入操作。LinkedList类实现了Queue接口&#xff0c;因此我们可以把LinkedList当成Queue来用。以下实例演示了队列(Queue)的用法&#xff1a;Ma…

@Html辅助方法

Html.LabelFor(m > m.UserName, new { class "col-md-2 control-label" })LabelFor使用了模型类中相应的DisplayName属性Html.ValidationSummary(true, "", new { class "text-danger" })验证消息的显示有两种&#xff0c;一种是Validation…

PrintJ的设计模式之旅——1.模式之父

好奇设计模式的源头&#xff0c;做了一番搜索和调查&#xff0c;于是便开启了这个系列“PrintJ的设计模式之旅”。 1.模式之父 GOF&#xff08;Gang of Four&#xff09; Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides合著了"Design Patterns: Elements of…

iOS 添加导航栏两侧按钮

self.navigationItem.leftBarButtonItem [[UIBarButtonItem alloc] initWithTitle:"首页" style:UIBarButtonItemStyleBordered target:self action:selector(popToRootView)] ;self.navigationItem.rightBarButtonItem [[UIBarButtonItem alloc] initWithTitle:&q…

java 1.6 ubuntu_ubuntu配置 Java SE 1.6

今天编译android 4.0时提示如下错误&#xff1a;You are attempting to build with the incorrect version of java.Your version is: java version "1.6.0_22".The correct version is: Java SE 1.6.查了一下现在已安装的java&#xff1a;java -versionjava version…

微信小程序 功能函数 把数字1,2,3,4换成春,夏,秋,冬

let season ‘1,2,3’;// console.log(season.length)if (season){if (season.length1){seasonChe1season.substr(0);seasonChe1 parseInt(seasonChe1)switch (seasonChe1) {case 1:(function(){seasonChe2春})()break;case 2:(function () {seasonChe2 夏})()break;case 3:(…

UVa 11549 Calculator Conundrum

大白书里面的题感觉就是没有什么固定的思路&#xff0c;只能认真理解学习汝佳大大的代码。 这里用的Floyd判圈法&#xff0c;就像插图里面的一样&#xff0c;两个小孩&#xff0c;一个快一个慢&#xff0c;如果实在一个环形跑道&#xff0c;那么快的那个最终一定会“追上”慢的…

servlet与MySQL商品管理系统_servlet和mysql实现宿舍管理系统

【实例简介】servlet mysql实现的宿舍管理系统&#xff0c;以及各个功能的视频录像【实例截图】【核心代码】Sushem└── Sushem├── kk 录像│ └── kk 2017-11-13 17-11-38.avi└── Sushem├── src│ ├── dao│ │ ├── BaoxiuDao.java│ │ ├──…

几个性能测试工具

我个人认为一个优秀的软件工程师必须掌握一定的测试技能。可能有的开发工程师认为测试是测试工程师的事情&#xff0c;不是开发工程师的事情。这种开发工程师是缺一条腿的&#xff0c;离开了测试工程师&#xff0c;你如何证明你的程序没有问题。 下面是我这两天搜集的性能测试工…

Bootstrap页面布局14 - BS按钮群组

首先看看这个代码&#xff1a; <div classbtn-group><button typebutton classbtn>计算机</button><button typebutton classbtn>网络</button><button typebutton classbtn>桌面项目</button> </div> 将功能相近的按钮分成一…