单点登录的功能实现主要原理:

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
版权声明:本文为博主原创文章,转载请附上博文链接!

最新文章

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

热门文章

  1. H5 小代码(实时更新)
  2. 同步异步,异步回调,线程队列,线程时间Event
  3. Markdown使用语法
  4. 2019 Multi-University Training Contest 7 Kejin Player Final Exam
  5. asp.net Core 获取应用程序所在目录的2种方式
  6. Python对象和类
  7. JConsole&VisualVM监控总结
  8. JAVA-第一课 环境的配置
  9. windows10 家庭版 无法远程2012的解决
  10. 【JZOJ3316】非回文数字