java通过filter单点登陆
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单点登陆相关推荐
- discuz java版_Discuz3.2与Java 项目整合单点登陆
整合部分 首先,当然是进行项目整合. 开始这一部分的前提是你的论坛已经启动并且安装好UCenter. 据了解 Discuz3.x 以下的版本是不带 UCenter 的,之前的就不去探讨了,如果没有的话 ...
- java php 单点登陆,cas实现单点登录,登出(java跟php客户端)(转)
cas实现单点登录,登出(java跟php客户端)(转)cas实现单点登录,登出(java和php客户端) (转) 最近项目中需要做单点登录,客户端包含java和php,java有几个应用程序,php ...
- php java 单点登录_用cas来实现php的单点登陆
最近项目中需要做单点登录,客户端包含Java.ruby和PHP,java有几个应用程序,php是discuz+supesite+ucenter,配置步骤如下: 1.cas服务端:下载地址:http:/ ...
- cas单点登陆。就这一篇就够了!!!!!
前言: cas是什么我就不累赘说了.就简单说下大致的流程.首先,cas是一个独立的项目.就是一个war包,部署在tomcat上面启动就ok.然后我们要实现单点登陆,无疑是访问系统1,如果没有登录,就跳 ...
- 单点登陆框架CAS的研究
CAS作为开源的单点登陆框架已经非常的流行了.由于它对已有系统的入侵性小,支持的语言多,备受广大开发者关注:也是很多公司将之作为单点登陆的首选框架.关于CAS如何搭建的文章,网上已经非常多了,随便搜搜 ...
- 08-微服务版单点登陆系统(SSO)实践
文章目录 单点登陆系统简介 背景分析 单点登陆系统概述 单点登陆系统解决方案设计 单点登陆系统初步设计 服务设计 工程结构设计 SSO父工程创建及初始化 创建父工程 父工程pom文件初始配置 系统基础 ...
- 社交登陆,分布式session,单点登陆,jwt
社交登陆,分布式session,单点登陆,jwt 一.社交登录 QQ. 微博. github 等网站的用户量非常大, 别的网站为了简化自我网站的登陆与注册逻辑, 引入社交登陆功能: 步骤: 1) . ...
- 在tomcat集群下利用redis实现单点登陆
场景:比如说我们要实现一个集群环境,无非是把多个项目部署到多个tomcat下,然后按照一定的算法,轮询什么的随机访问多个tomcat服务器,但是问题也会有许多,比如说,我们最开始是把登陆人的信息存放到 ...
- 09-微服务版的单点登陆系统设计及实现(2105~2106)
文章目录 简介 背景分析 单点登陆系统 快速入门实践 工程结构如下 创建认证授权工程 添加项目依赖 构建项目配置文件 添加项目启动类 启动并访问项目 自定义登陆逻辑 业务描述 定义安全配置类 定义用户 ...
最新文章
- AjaxControlToolkit中CalendarExtender日历控件的用法
- Android+Eclipse修改包路径
- maven工程运行环境修改
- 没有android:padding属性,android自定义无上下padding的textview
- NoSql理解+传统关系型数据库ACID+Nosql的CAP+BASE的理解
- Xilinx实习一年总结
- 产业研发用房是什么意思_新型产业用地(M0)之政策分享篇
- mybatis的动态sql学习注意点!!!
- [2019杭电多校第四场][hdu6616]Divide the Stones
- FPGROWTH算法
- 不定积分求解(三大方法)
- 详解语言模型NGram及困惑度Perplexity
- HTML5 2D平台游戏开发#8指令技
- php strict_types
- Android调用系统相机拍照并保存到指定位置
- html 字体图标转换工具,HTML5 webfont字体图标的使用
- c语言错误:error C2018: unknown character '0xa3'
- 智慧工厂之化工厂人员定位系统,工厂实时定位,视频联动-新导智能
- grails 自动生成crud代码和前端页面
- 【数据库运维】mysql备份恢复练习
热门文章
- 线性回归(Lasso,Ridge,ElasticNet)调参
- Google浏览器常用快捷键
- Cocos Creator 位图字体(艺术数字配置、BMFont)
- 节流(Throttle)与防抖(Debounce)区别与demo实现+ 图解
- Tekton构建Springboot项目操作手册
- cmd ping 一台计算机名,windows CMD命令查看局域网内所有主机名及IP
- HttpClient的POST请求提示302问题解决
- FAST-LIO2代码解析(三)
- SQL Server的密码忘了怎么设置新密码
- 基于概率论的分类方法:朴素贝叶斯及CSDN_RSS源分析