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
版权声明:本文为博主原创文章,转载请附上博文链接!
最新文章
- 敏捷团队中的QA由来
- outlook 2016 for windows 每次刷新发送接收邮件会弹出登陆界面
- java反射实现动态代理
- AOJ 0121: Seven Puzzle (BFS DP STL 逆向推理)(转载)
- 移动端使用HTML5表单增强体验
- windows下redis服务安装
- NOIP 2014	无线网络发射器选址
- 应用Oracle(用户创建和授权)
- POJ 1734 Sightseeing trip
- lll
- 10分钟详解Spring全家桶7大知识点
- 用idhttp打开网页或下载文件时如何显示进度
- 以太坊Bootstrap和Kademlia算法实现逻辑简介(基于cpp-ethereum)
- LR基本知识学习
- linux内核期中总结
- flask模板应用-javaScript和CSS中jinja2
- 真实分享记录我学习Linux系统遇到的问题
- 算法:整数与ip地址转换
- laravel中不使用 remember_token时退出报错,如何解决?
- 带你走进EJB--将EJB发布为Webservice(4)