Java Web 项目SSO实战
2014-02-08 17:57
337 查看
前言
SSO 是什么应该就不用多说了- 单点登录。现在有一个不大的web 项目, 使用域帐号来控制权限。 对应的功能就很简单。
在某台机器上使用浏览器访问,
如果这台机器是域帐号登录的,则直接进入页面;
如果不是使用域帐号登录的, 则使用用户名, 密码登录。
解法一: 比对帐号登录
这种解法不推荐使用, 但是本系统之前使用这种方式来解决的, 所以也提一下。这种解法的思想是:
1. 系统有一套用户信息的表(用户名, 域帐号名, 密码)
2. 获取客户端登录机器的域用户名。
3. 比对域用户名是否存在系统的用户信息表中,如果存在则登录系统。
关于如何能获取到客户端登录机器的域用户名,可以参考:
java web 项目如何获取客户端机器信息
applet 可以获取登录的域用户, 但是使用applet 略显复杂。使用NTLM 的方式的方式也可以获取, 但是如果是firefox 的话, 会弹出输入域帐号用户名,密码的对话框。但是这里如果输入其他人的帐号的话, 就存在很严重的安全问题的。
要使用对比帐号的方式,就不能让以用户输入帐号的方式, 因为这个压根就不会验证域帐号的密码。
解法二:jcifs 验证
要有较高的安全性, 就要真正的却验证域帐号、密码是否正确。jcifs 这个开源包就可以实现。
1. 下载 jcifs
到 http://jcifs.samba.org/src/ 下载最新的jar 档, 目前的最新版是 jcifs-1.3.17.jar
也可以到下面地址下载:
https://skydrive.live.com/redir?resid=5B4EDBCD9EF1AB6B!189&authkey=!AJQZjxtiRSPJ0_c&ithint=file%2c.zip
2. 把 jar 档拷入项目的web-inf/lib 目录中
3. 修改web.xml
<filter> <filter-name>NtlmHttpFilter</filter-name> <filter-class>jcifs.http.NtlmHttpFilter</filter-class> <init-param> <param-name>jcifs.http.domainController</param-name> <param-value>ADHost</param-value> </init-param> <init-param> <param-name>jcifs.smb.client.username</param-name> <param-value>user</param-value> </init-param> <init-param> <param-name>jcifs.smb.client.password</param-name> <param-value>password</param-value> </init-param> <init-param> <param-name>jcifs.util.loglevel</param-name> <param-value>2</param-value> </init-param> </filter> <filter-mapping> <filter-name>NtlmHttpFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
filter 是什么也不多说了。
jcifs.http.domainController -- 配置域的服务器
jcifs.smb.client.username - 查看域服务器的用户名
jcifs.smb.client.password- 查看域服务器的密码
其他
如果是使用域帐号登录客户端机器的话,使用IE, Chrome 不会弹出输入域帐号,密码的对话框, 因为它会把这些信息自动传到服务端。
但是使用firefox 的话, 始终弹出输入域帐号,密码的对话框, 可以使用如下方式设置不弹出对话框。
1.在火狐(Firefox)地址栏中输入:about:config
2.然后在过滤器中输入:NTLM
3.双击network.automatic-ntlm-auth.trusted-uris,
4.在输入值中输入 localhost (根据实际状况设置)
5.然后关闭火狐(Firefox)浏览器,重新打开就可以了。
相关文章推荐
- Java Web 项目SSO实战
- Java Web 项目SSO实战二之(win7 and Windows server 2008)
- Java Web 项目SSO实战二之(win7 and Windows server 2008)
- 【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (第十节)
- 【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (第七节)
- 【手把手】JavaWeb 入门级项目实战 - 文章发布系统 (第一节)
- JavaWeb之项目实战-网上书店(二十一)
- 【精编重制版】JavaWeb 入门级项目实战 -- 文章发布系统 (第一节)
- Java Drp项目实战——Web应用server
- 【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (作者:剽悍一小兔)第七、八、九节学习随笔
- 【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (第二节)
- JavaWeb 学习(Java Web 典型模块与项目实战大全)
- JavaWeb 入门级项目实战 -- 文章发布系统 (第六节)
- CAS做单点登陆(SSO)——集成Java Web 项目
- 【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (第三节)
- 【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (作者:剽悍一小兔)前五节学习随笔
- 【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (第七节)
- 【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (第十一节)
- JavaWeb 入门级项目实战 -- 文章发布系统 (第九节)
- 【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (第四节)