采用SSH架构加以说明:
1.  建立一个登录管理类LoginManager
2.  在LoginManager中定义一个集合,管理登录的用户。
3.  在Spring中将LoginManager配置成单例
4.  如果使用自定义的用户管理类,则为了说明方便,将此类命名为UserContext(表示用户授权的上下文)
5.  如果未使用自定义的用户管理类,则直接使用Session。
6.  在登录授权对象中,检查用户是否是合法用户,如果是合法用户,则在LoginManager的集合中查找用户是否已经在线,如果不在线,则将用户加入集合。
7.  处理策略一:如果用户已经在线,则取新登录用户的Session,将它失效,则能阻止新登录用户登录。
8.  处理策略二:如果用户已经在线,则取出在线用户的Session,将它失效,再把新登录用户加入LoginManager的集合。则先登录用户不能执行有权限的操作,只能重新登录。

代码片段:
1. applicationContext.xml

<bean id="loginManager" class="LoginManager" scope="singleton" />
<bean id="action" class="LoginAction" scopt="prototype" >
<property name="laginManager" ref="loginManager" />
</bean>

2. LoginManager.java

Collection<Session> sessions;

public Session login(Session session) {
for (Session s : sessions) {
if (s 与 session 是同一用户)
策略一: return session
策略二:{
sessions.add(session); // 这两行在循环中操作集合类会抛出异常
sessions.remove(s); // 此处仅为简单示范代码,实际代码中应该在循环外处理
return s;
}
}
sessions.add(session); return null;
}

3. LoginAction.java

LoginManager loginManager;

public String execute() throws Exception {
取session
检查用户名,密码
if (是合法用户) {
session = loginManager.login(session);
if (null!=session) session.invalidate();
}
}

4. 如果自定义了UserContext,则可将集合改成Collection<UserContext> users;

5. UserContext.java

Session session;
Session getSession() {
return this.session;
} boolean login(String userName, String password) {
访问数据库,检查用户名密码
return 是否合法;
} boolean sameUser(UserContext uc) {
return uc.userName.equals(this.userName);
}

6. 修改LoginManager.java

Collection<UserContext> users;

public UserContext login(UserContext user) {
for (UserContext uc : users) {
if (uc.sameUser(user))
策略一: return user
策略二:{
users.add(user); // 这两行在循环中操作集合类会抛出异常
users.remove(uc); // 此处仅为简单示范代码,实际代码中应该在循环外处理
return uc;
}
}
users.add(user); return null;
}

7. 修改LoginAction.java

public String execute() throws Exception {
取session // 也可以在UserContext内部取session。
UserContext user = new UserContext();
user.setSession(session);
if (user.login(userName, password)) {
UserContext uc = loginManager.login(user);
if (null!=uc) uc.getSession().invalidate();
}
}

Java Web网站应用中的单点登录的更多相关文章

  1. 使用 CAS 在 Tomcat 中实现单点登录 http://www.ibm.com/developerworks/cn/opensource/os-cn-cas/

    developerWorks 中国 技术主题 Open source 文档库 使用 CAS 在 Tomcat 中实现单点登录 单点登录(Single Sign On , 简称 SSO )是目前比较流行 ...

  2. 在Java web项目中防止用户注销后使用浏览器中的“后退”按钮返回注销前页面

    一背景 公司安全整改, 要求:系统中对于关键业务操作应确保使用浏览器"后退"功能无法回到上一步操作界面. 提供:凭证提供所有被检查系统关键业务操作后回退视频,视频显示关键业务操作后 ...

  3. JAVA WEB项目中各种路径的获取

    JAVA WEB项目中各种路径的获取 标签: java webpath文件路径 2014-02-14 15:04 1746人阅读 评论(0) 收藏 举报  分类: JAVA开发(41)  1.可以在s ...

  4. Java Web开发中MVC设计模式简介

    一.有关Java Web与MVC设计模式 学习过基本Java Web开发的人都已经了解了如何编写基本的Servlet,如何编写jsp及如何更新浏览器中显示的内容.但是我们之前自己编写的应用一般存在无条 ...

  5. linux 下用renameTo方法修改java web项目中文件夹名称问题

    经测试,在Linux环境中安装tomcat,然后启动其中的项目,在项目中使用java.io.File.renameTo(File dest)方法可行. 之前在本地运行代码可以修改,然后传到Linux服 ...

  6. 对Java Web项目中路径的理解

    第一个:文件分隔符 坑比Window.window分隔符 用\;unix采用/.于是用File.separator来跨平台 请注意:这是文件路径.在File f = new File(“c:\\hah ...

  7. 在Java Web项目中添加定时任务

    在Java Web程序中加入定时任务,这里介绍两种方式:1.使用监听器注入:2.使用Spring注解@Scheduled注入. 推荐使用第二种形式. 一.使用监听器注入 ①:创建监听器类: impor ...

  8. Java Web项目中缺少Java EE 6 Libraries怎么添加

    Java Web项目中缺少Java EE 6 Libraries怎么添加 具体步骤如下: 1.项目名称上点击鼠标右键,选择"Build Path-->Configure Build P ...

  9. Java Web开发中路径问题小结

     Java Web开发中,路径问题是个挺麻烦的问题,本文小结了几个常见的路径问题,希望能对各位读者有所帮助. (1) Web开发中路径的几个基本概念 假设在浏览器中访问了如下的页面,如图1所示: 图1 ...

随机推荐

  1. 如何解决Eclipse启动时画面一闪而过

    以前Eclipse都可以正常使用,突然有一天不能启动了,点击图标后启动画面一闪之后就消失了,以下是一些解决方案 1. 找到Eclipse目录下的eclipse.exe,右键点击->发送到桌面快捷 ...

  2. delphi 换行操作 Word

    delphi 换行操作 我将我的商用<旅行社管理系统>的 发团通知 部分奉献给您,望对您有所帮助. procedure TFrmMain.N327Click(Sender: TObject ...

  3. codeforces 468A. 24 Game 解题报告

    题目链接:http://codeforces.com/problemset/problem/468/A 题目意思:给出一个数n,利用 1 - n 这 n 个数,每个数只能用一次,能否通过3种运算: + ...

  4. 项目总结(四)--- 网络封包分析工具Charles

    Charles是Mac下一款截取网络封包的工具,主要原理就是将自己设置成为熊网络访问的代理服务器,这样的话,所有的网络请求都得通过它来完成,从而实现网络封包的拦截分析. 这款软件功能整体来说还是非常强 ...

  5. SQLHelper、DBUtil终极封装

    DBUtil.java package org.guangsoft.util; import java.io.InputStream; import java.sql.Connection; impo ...

  6. css3学习总结7--CSS3 2D转换

    CSS3 转换 通过 CSS3 转换,我们能够对元素进行移动.缩放.转动.拉长或拉伸. 2D 转换 在本次,您将学到如下 2D 转换方法: 1. translate() 2. rotate() 3. ...

  7. css3学习总结6--CSS3字体

    使用自己需要的字体 在新的 @font-face 规则中,您必须首先定义字体的名称(比如 myFirstFont),然后指向该字体文件. 如需为 HTML 元素使用字体,请通过 font-family ...

  8. Tomcat 解决The code of method _jspService(HttpServletRequest, HttpServletResponse) is exceeding the 65535 bytes limit

    解法: 修改tomcat下的web.xml,     搜索:JspServlet, 增加: <init-param> <param-name>mappedfile</pa ...

  9. 【读书笔记】读《JavaScript设计模式》之代理模式

    一.定义 代理是一个对象,它可以用来控制对另一个对象的访问.它与另外那个对象实现了同样的接口,并且会把任何方法调用传递给那个对象.另外那个对象通常称为本体.代理可以代替其实体被实例化,并使其可被远程访 ...

  10. 【读书笔记】读《JavaScript DOM 编程艺术-第2版》

    1.DHTML DHTML曾被认为是HTML/XHTML.CSS和JavaScript相结合的产物,就像今天的HTML5那样,但把这些东西真正凝聚在一起的是DOM.如果真的需要来描述这一过程的话,“D ...