zoukankan      html  css  js  c++  java
  • 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
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    Linux系统调用
    Linux的中断 & 中断和异常的区别
    system v和posix的共享内存对比 & 共享内存位置
    epoll里面mmap释疑
    提高网络效率的总结
    推荐相关学习 & 典型算法、典型特征、典型推荐系统框架
    最大似然法理解
    调试多线程 & 查死锁的bug & gcore命令 & gdb对多线程的调试 & gcore & pstack & 调试常用命令
    内存屏障 & Memory barrier
    锁相关知识 & mutex怎么实现的 & spinlock怎么用的 & 怎样避免死锁 & 内核同步机制 & 读写锁
  • 原文地址:https://www.cnblogs.com/Jeely/p/11214374.html
Copyright © 2011-2022 走看看