jeecms框架单点登录功能的实现
单点登录的功能实现主要原理:
1: 在点击登录按钮的时候使用reponse.addCookie()方法向浏览器发送cookie;
2: 在前段拦截器中的request.getCookie()在接收到设置的cookie,然后根据cookie的值设置用户;
jeecms里在CookieUtils类中封装了cookie的3个基本方法 addCookie()添加、getCookie() 获取和cancleCookie()取消
/**
* 根据部署路径,将cookie保存发送到浏览器
*
* @param request
* @param response
* @param name cookie的名字
* @param value cookie的值
* @param expiry cookie生效的根路径
* @param domain cookie生效的域名可以是ip地址
* @return
*/
public static Cookie addCookie(HttpServletRequest request,
HttpServletResponse response, String name, String value,
Integer expiry, String domain) {
Cookie cookie = new Cookie(name, value);
if (expiry != null) {
cookie.setMaxAge(expiry);
}
if (StringUtils.isNotBlank(domain)) {
cookie.setDomain(domain);
}
String ctx = request.getContextPath();
cookie.setPath("/");
response.addCookie(cookie);
return cookie;
}
/**
* 获得cookie
*
* @param request
* HttpServletRequest
* @param name
* cookie name
* @return if exist return cookie, else return null.
*/
public static Cookie getCookie(HttpServletRequest request, String name) {
Assert.notNull(request);
Cookie[] cookies = request.getCookies();
if (cookies != null && cookies.length > 0) {
for (Cookie c : cookies) {
if (c.getName().equals(name)) {
return c;
}
}
}
return null;
}
/**
* 取消cookie
*
* @param request
* @param response
* @param name
* @param domain
*/
public static void cancleCookie(HttpServletRequest request,
HttpServletResponse response, String name, String domain) {
Cookie cookie = new Cookie(name, "");
cookie.setMaxAge(0);
String ctx = request.getContextPath();
cookie.setPath(StringUtils.isBlank(ctx) ? "/" : ctx);
if (StringUtils.isNotBlank(domain)) {
cookie.setDomain(domain);
}
response.addCookie(cookie);
}
功能实现主要是在CasLogin类中的submit()方法中加入使用addCookie()添加cookie;
然后在FrontContextInterceptor类中的preHandle()方法中使用getCookie()获取cookie,通过cookie设置当前用户;
代码如下:
if (view != null) {
Cookie cookie1 = CookieUtils.addCookie(request, response, "fabule_username", user.getId().toString(), 6000, "192.168.0.14");
return view;
} else {
FrontUtils.frontData(request, model, site);
return "redirect:login.jspx";
}
CmsUser user = null;
Cookie userCookie = CookieUtils.getCookie(request, "fabule_username");
if(user == null && userCookie != null){
Integer userId = Integer.parseInt(userCookie.getValue());
if (userId != null) {
user = cmsUserMng.findById(userId);
}
}
if (user != null) {
CmsUtils.setUser(request, user);
}
return true;
---------------------
作者:哲-哲
来源:CSDN
原文:https://blog.csdn.net/u011969811/article/details/40586743
版权声明:本文为博主原创文章,转载请附上博文链接!
jeecms框架单点登录功能的实现的更多相关文章
- 重学 Java 设计模式:实战装饰器模式(SSO单点登录功能扩展,增加拦截用户访问方法范围场景)
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 对于代码你有编程感觉吗 很多人写代码往往是没有编程感觉的,也就是除了可以把功能按照固 ...
- shiro中接入单点登录功能
最近新建的系统中使用了shiro,而shiro框架中包含登录认证和鉴权的功能,因为我们系统要统一接入公司内部的单点登录(isso)系统,所以通过isso的登录用户,需要在shiro中置为已认证,一下提 ...
- 基于EasyNVR摄像机无插件直播流媒体服务器实现类似于单点登录功能的免登录直播功能
提出问题 EasyNVR是一套摄像机无插件直播的流媒体服务器软件,他可以接入各种各样的摄像机,再经过转化统一输出无插件化直播的RTMP.HLS.HTTP-FLV流,同时,EasyNVR为了数据安全,提 ...
- 【C#】ASP.NET网页中添加单点登录功能
背景 首先,要说明的是,原先需求定义的是,同一个账号只能同时有一个人来登录,如果另外一个登录的话,前一个登陆者就自动被踢掉.本来原先要做成存储到服务器的数据库中,但是后来如果是非正常退出的话 下次就没 ...
- DRF框架QQ登录功能
用户模块---QQ登录 流程图 QQ登录文档:http://wiki.connect.qq.com/%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C_oauth2-0 流程简述 ...
- PHP简单实现单点登录功能示例
1.准备两个虚拟域名 127.0.0.1 www.openpoor.com127.0.0.1 www.myspace.com 2.在openpoor的根目录下创建以下文件 index.PHP 1 ...
- 使用CAS实现单点登录功能
目录 单点登录 简介 CAS服务器部署 上传tomcat服务器压缩到文件夹/usr/local/cas目录下,解压,修改tomcat文件夹名为tomcat 修改tomcat配置文件的端口号 关闭tom ...
- 实现单点登录功能的思路以及kafka同步数据
单点登录以及用户数据同步思路与方案 当公司业务分布于多个子系统时, 同一用户在A系统注册,即可在其他所有关联系统使用, 并支持登录A系统后,自动在其他系统登录,退出同理. 在A平台修改通用的用户数据( ...
- (四)SSO之CAS框架单点登录,自定义验证登录方式
应需求的变化,在登录cas的时候,默认根据用户名和密码进行验证,如果加上用户名,密码和一个系统标识进行验证呢?该如何做呢? 我们知道cas默认的登录界面中,输入的用户名和密码,再配置一下deploye ...
随机推荐
- JavaConfig
Java Config是Spring的一个子项目,它旨在通过Java类的方式提供Bean的定义信息,是Spring4.0的核心功能 普通的POJO只要标注@Configuration注解,就可以为 ...
- exit与return的区别
===========================PHP的解释=========================================================== return ...
- 如何查看redis占用内存大小
redis缓存固然高效,可是它会占用我们系统中宝贵的内存资源,特别是当我们的项目运行了一段时间后,我们需要看一下redis占用了多少内存,那么可以用“info”命令查看. 执行info命令后,找到Me ...
- 如何在select标签中使用a标签跳转页面
1. 需求: 在select中想直接使用a标签跳转,错误想法 <select id=""> <option>choose one</option> ...
- 二分查找总结及部分Lintcode题目分析 3
Search in rotated sorted array,题目中也给出了相应的例子,就是在sorted array某个节点发生了翻转(ie.0 1 2 4 5 6 7 might become 4 ...
- Python collection模块与深浅拷贝
collection模块是对Python的通用内置容器:字典.列表.元组和集合的扩展,它包含一些专业的容器数据类型: Counter(计数器):dict子类,用于计算可哈希性对象的个数. Ordere ...
- STM32F103 Feature
- System Verilog的概念以及与verilog的对比
以下内容源自:http://blog.csdn.net/gtatcs/article/details/8970489 SystemVerilog语言简介 SystemVerilog是一种硬件描述和验证 ...
- 逆元 组合A(n,m) C(n,m)递推 隔板法
求逆元 https://blog.csdn.net/baidu_35643793/article/details/75268911 int inv[N]; void init(){ inv[] = ; ...
- python基础语法(变量与数据类型)
python基础语法(变量与数据类型) 一.python变量 python中的变量不需要声明.每个变量在使用钱都需要赋值,变量赋值以后,该变量才会被创建 在python中,变量就是变量,它没有类型,我 ...