1.user控制类

package com.test.bean;

import java.util.HashMap;
import java.util.Map;

/**
 * Created by Administrator on 2016/8/24.
 */
public class UserMap {
    private static Map<String, String> userMap = new HashMap<String, String>();

public static synchronized void add(String username, String sessionId) {
        userMap.put(username, sessionId);
    }

public static synchronized boolean isLastLogin(String user, String sessionId) {
        return userMap.get(user).equals(sessionId);
    }

}

2. web.xml

<filter>  
        <filter-name>SignLoginFilter</filter-name>  
        <filter-class>com.test.servlet.SignLoginFilter</filter-class>          
    </filter>       
    <filter-mapping>  
        <filter-name>SignLoginFilter</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>
    <servlet>
        <servlet-name>LoginActionLoginServlet</servlet-name>
        <servlet-class>com.test.servlet.LoginActionLoginServlet</servlet-class>
    </servlet>

<servlet-mapping>
        <servlet-name>LoginActionLoginServlet</servlet-name>
        <url-pattern>/websso/loginAction_login.json</url-pattern>
    </servlet-mapping>
   
3.LoginActionLoginServlet

package com.test.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.test.bean.UserMap;
import com.test.util.JdbcUtils;
import com.test.util.JsonUtils;
import com.test.util.SHAUtils;

public class LoginActionLoginServlet extends HttpServlet {

private static final long serialVersionUID = 1L;
    public static int TIME_OUT=3600;

@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        doPost(req, resp);

}

@Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        
        resp.setCharacterEncoding("UTF-8");
        resp.setContentType("application/x-www-form-urlencoded; charset=UTF-8;application/json;");
        HttpSession session = req.getSession();
        String memberAccount = req.getParameter("memberAccount");
        String memberUmm = req.getParameter("memberUmm");
        String check = req.getParameter("check");
        String pwd = JdbcUtils.getPwd(memberAccount);
        String memberUmmFromDB = SHAUtils.sha1(pwd);
        String firstCard = JdbcUtils.getFirstCard(memberAccount);
        session.setAttribute("memberAccount", memberAccount);
        session.setAttribute("currentCard", firstCard);
        UserMap.add(memberAccount, session.getId());
        HashMap<String, String> map = new HashMap<String, String>();
        map.put("location",
                "http://www.sinopecsales.com/gas/ssoLoginRedirect.action");
        if (memberUmmFromDB.equals(memberUmm)&& check.equals("45")) {
            map.put("success", "0");
        } else {
            map.put("success", "1");
        }
        String json = JsonUtils.mapToJson(map);

PrintWriter out = null;
        try {
            out = resp.getWriter();
            out.write(json);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (out != null) {
                out.close();
            }
        }
        
    }
    
}

4.SignLoginFilter

package com.test.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import com.test.bean.UserMap;

public class SignLoginFilter implements Filter {

@Override
    public void doFilter(ServletRequest req, ServletResponse resp,
            FilterChain fChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;
        resp.setCharacterEncoding("UTF-8");
        resp.setContentType("application/x-www-form-urlencoded; charset=UTF-8;application/json;");
        String url = request.getRequestURL().toString();
        
        if (url.contains("/websso/YanZhengMaServlet")
                || url.contains("/websso/loginAction_login.json")) {
            fChain.doFilter(req, resp);
            return;
        }

HttpSession session = request.getSession();
        if (session.getAttribute("memberAccount") == null) {
            PrintWriter out = null;
            try {
                out = resp.getWriter();
                out.write("请登录");
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (out != null) {
                    out.close();
                }
            }
            return;
        }
        String sessionId = session.getId();

Object userNameObject = session.getAttribute("memberAccount");

if (userNameObject != null) {
            String userName = userNameObject.toString();
            if (!UserMap.isLastLogin(userName, sessionId)) {
                PrintWriter out = null;
                try {
                    out = resp.getWriter();
                    out.write("请重新登录");
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    if (out != null) {
                        out.close();
                    }
                }
                return;
            }
        }
        fChain.doFilter(req, resp);
    }

@Override
    public void init(FilterConfig fConfig) throws ServletException {

}

@Override
    public void destroy() {
        // TODO Auto-generated method stub

}

}

java通过filter单点登陆相关推荐

  1. discuz java版_Discuz3.2与Java 项目整合单点登陆

    整合部分 首先,当然是进行项目整合. 开始这一部分的前提是你的论坛已经启动并且安装好UCenter. 据了解 Discuz3.x 以下的版本是不带 UCenter 的,之前的就不去探讨了,如果没有的话 ...

  2. java php 单点登陆,cas实现单点登录,登出(java跟php客户端)(转)

    cas实现单点登录,登出(java跟php客户端)(转)cas实现单点登录,登出(java和php客户端) (转) 最近项目中需要做单点登录,客户端包含java和php,java有几个应用程序,php ...

  3. php java 单点登录_用cas来实现php的单点登陆

    最近项目中需要做单点登录,客户端包含Java.ruby和PHP,java有几个应用程序,php是discuz+supesite+ucenter,配置步骤如下: 1.cas服务端:下载地址:http:/ ...

  4. cas单点登陆。就这一篇就够了!!!!!

    前言: cas是什么我就不累赘说了.就简单说下大致的流程.首先,cas是一个独立的项目.就是一个war包,部署在tomcat上面启动就ok.然后我们要实现单点登陆,无疑是访问系统1,如果没有登录,就跳 ...

  5. 单点登陆框架CAS的研究

    CAS作为开源的单点登陆框架已经非常的流行了.由于它对已有系统的入侵性小,支持的语言多,备受广大开发者关注:也是很多公司将之作为单点登陆的首选框架.关于CAS如何搭建的文章,网上已经非常多了,随便搜搜 ...

  6. 08-微服务版单点登陆系统(SSO)实践

    文章目录 单点登陆系统简介 背景分析 单点登陆系统概述 单点登陆系统解决方案设计 单点登陆系统初步设计 服务设计 工程结构设计 SSO父工程创建及初始化 创建父工程 父工程pom文件初始配置 系统基础 ...

  7. 社交登陆,分布式session,单点登陆,jwt

    社交登陆,分布式session,单点登陆,jwt 一.社交登录 QQ. 微博. github 等网站的用户量非常大, 别的网站为了简化自我网站的登陆与注册逻辑, 引入社交登陆功能: 步骤: 1) . ...

  8. 在tomcat集群下利用redis实现单点登陆

    场景:比如说我们要实现一个集群环境,无非是把多个项目部署到多个tomcat下,然后按照一定的算法,轮询什么的随机访问多个tomcat服务器,但是问题也会有许多,比如说,我们最开始是把登陆人的信息存放到 ...

  9. 09-微服务版的单点登陆系统设计及实现(2105~2106)

    文章目录 简介 背景分析 单点登陆系统 快速入门实践 工程结构如下 创建认证授权工程 添加项目依赖 构建项目配置文件 添加项目启动类 启动并访问项目 自定义登陆逻辑 业务描述 定义安全配置类 定义用户 ...

最新文章

  1. AjaxControlToolkit中CalendarExtender日历控件的用法
  2. Android+Eclipse修改包路径
  3. maven工程运行环境修改
  4. 没有android:padding属性,android自定义无上下padding的textview
  5. NoSql理解+传统关系型数据库ACID+Nosql的CAP+BASE的理解
  6. Xilinx实习一年总结
  7. 产业研发用房是什么意思_新型产业用地(M0)之政策分享篇
  8. mybatis的动态sql学习注意点!!!
  9. [2019杭电多校第四场][hdu6616]Divide the Stones
  10. FPGROWTH算法
  11. 不定积分求解(三大方法)
  12. 详解语言模型NGram及困惑度Perplexity
  13. HTML5 2D平台游戏开发#8指令技
  14. php strict_types
  15. Android调用系统相机拍照并保存到指定位置
  16. html 字体图标转换工具,HTML5 webfont字体图标的使用
  17. c语言错误:error C2018: unknown character '0xa3'
  18. 智慧工厂之化工厂人员定位系统,工厂实时定位,视频联动-新导智能
  19. grails 自动生成crud代码和前端页面
  20. 【数据库运维】mysql备份恢复练习

热门文章

  1. 线性回归(Lasso,Ridge,ElasticNet)调参
  2. Google浏览器常用快捷键
  3. Cocos Creator 位图字体(艺术数字配置、BMFont)
  4. 节流(Throttle)与防抖(Debounce)区别与demo实现+ 图解
  5. Tekton构建Springboot项目操作手册
  6. cmd ping 一台计算机名,windows CMD命令查看局域网内所有主机名及IP
  7. HttpClient的POST请求提示302问题解决
  8. FAST-LIO2代码解析(三)
  9. SQL Server的密码忘了怎么设置新密码
  10. 基于概率论的分类方法:朴素贝叶斯及CSDN_RSS源分析