jeecms框架单点登录功能的实现

来源:互联网 发布:花千骨网络流行语 编辑:程序博客网 时间:2024/06/04 19:10

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

         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;



2 0