用户模块的实现(注册+退出)

用户注册

url分析

根据url地址说明请求为同域请求:
image.png

页面JS分析

说明:根据分析获取返回值数据信息应该为SysResult对象。
image.png

编辑UserCotroller

/**
 * 需求:实现用户信息注册
 * url:http://www.jt.com/user/doRegister
 * 参数:password: admin123 username: adming2222 phone: 13111111111
 * 3,返回值结果 SysResult对象
 */
@RequestMapping("/doRegister")
@ResponseBody //将数据转化为json
public SysResult saveUser(User user){
    //消费者基于dubbo协议将user对象进行远程网络数据传输
 userService.saveUser(user);
    return SysResult.success();
}

编辑UserService

/**
     * 注意事项:
     *  1.暂时使用电话号码代替邮箱
     *  2.密码进行md5加密.
     *  3.入库操作注意事务控制
     * @param user
     */
    @Override
    public void saveUser(User user) {
        String md5Pass =
                DigestUtils.md5DigestAsHex(user.getPassword().getBytes());
        user.setEmail(user.getPhone())
            .setPassword(md5Pass);
        userMapper.insert(user);
    }

页面效果展示

image.png

用户信息回显

页面url分析

image.png

检查页面JS

image.png

编辑SSO的Controller

    /**
 * 业务实现
 *      1.用户通过cookie信息查询用户数据,   通过ticket获取redis中的业务数据
 *      2.url请求路径:"http://sso.jt.com/user/query/" + _ticket,
 *      3.参数:参数在url中,利用restFul获取
 *      4.返回值结果:SysResult对象(userJSON)
 */
 @RequestMapping("/query/{ticket}")
    public JSONPObject findUserByTicket(@PathVariable String ticket,
                                      HttpServletResponse response,
                                        String callback){
        String userJson = jedisCluster.get(ticket);
        //cookie信息可能出现的问题:
 //1.lru算法,可能会清空cookie中的数据
 //2.有可能cookie信息有误
 if(StringUtils.isEmpty(userJson)){
           /* //如果判断cookie为空,则应该删除cookie信息
 Cookie cookie=new Cookie("JT_TICKET", ""); //设置一个超时时间
 cookie.setMaxAge(0); //设置域名
 cookie.setDomain("jt.com"); //设置路径
 cookie.setPath("/"); //用response删除cookie信息
 response.addCookie(cookie); //因为是JSONP格式,所以返回也应该是JSONP格式,而且参数要返回callback*/
 //利用cookie工具API
 CookieUtil.deleteCookie(response, "JT_TICKET", "jt.com");
            return new JSONPObject(callback,SysResult.fail());
        }else{
            //如果正确则直接返回成功,并将ticket返回
 return new JSONPObject(callback, SysResult.success(userJson));
        }
    }
}

编辑Cookie工具API

package com.jt.util;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//cookie的工具API
public class CookieUtil {
    //新增cookie
 public static void addCookie(HttpServletResponse response,
                                 String cookieName,
                                 String cookieValue,
                                 int seconds,
                                 String domain ){
        Cookie cookie=new Cookie(cookieName, cookieValue);
        cookie.setMaxAge(seconds);
        cookie.setDomain(domain);
        cookie.setPath("/");
        response.addCookie(cookie);
    }
    //根据name查询value的值
 public static String getCookieValue(HttpServletRequest request,String cookieName){
        //创建一个cookie数组
 Cookie[] cookies = request.getCookies();
        //判断cookies是否为空,里面是否有值
 if(cookies!=null && cookies.length>0){
            for(Cookie cookie:cookies){
                //判断cookie中的信息是否一致
 if(cookieName.equals(cookie.getName())){
                    //如果一致则返回value的值
 return cookie.getValue();
                }
            }
        }
        //如果名字信息不一致则直接返回null
 return null;
    }
    //删除cookie(调用addCookie方法)
 public static void deleteCookie(HttpServletResponse response,
                                    String cookieName,String domain){
        addCookie(response, cookieName, "", 0, domain);
    }
}

用户退出操作

业务说明

如果用户点击退出,首先应该删除Redis中的数据,其次删除cookie中的数据,最后重定向到系统首页。

URL分析

image.png

编辑UserController

/**
 * 实现用户的退出操作,重定向到系统首页
 * url:http://www.jt.com/user/logout.html
 * 业务:
 *      1.删除redis中的数据
 *      2.删除cookie中的信息
 */
@RequestMapping("logout")
public String logout(HttpServletRequest request,HttpServletResponse response){
    //根据JT_TICKET获取ticket的值
 String ticket = CookieUtil.getCookieValue(request, "JT_TICKET");
    //判断ticket值是否为空
 //如果不为空【!StringUtils.isEmpty(ticket)】,则删除cookie里面的信息和redis中的数据,然后返回系统首页
 //如果为空则不执行下面的代码,直接返回系统首页
 if(!StringUtils.isEmpty(ticket)){
        jedisCluster.del(ticket);
        CookieUtil.deleteCookie(response,"JT_TICKET","jt.com");
    }
    //重定向到系统首页(redirect)
 return "redirect:/";
}

你可能感兴趣的:(java)