用户注册
url分析
根据url地址说明请求为同域请求:
页面JS分析
说明:根据分析获取返回值数据信息应该为SysResult对象。
编辑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);
}
页面效果展示
用户信息回显
页面url分析
检查页面JS
编辑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分析
编辑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:/";
}