用户登录操作
来源:互联网 发布:修复老电影软件下载 编辑:程序博客网 时间:2024/06/05 17:00
public interface LoginService { //参数:用户名和密码 //业务逻辑: /* * 1、判断用户和密码是否正确 * 2、如果不正确,返回登录失败 * 3、如果正确生成token。 * 4、把用户信息写入redis,key:token, value:用户信息 * 5、设置Session的过期时间 * 6、把token返回 */ //返回值:E3Result,其中包含token信息 E3Result userLogin(String username, String password);}/** * 用户登录处理 * <p>Title: LoginServiceImpl</p> * <p>Description: </p> * @version 1.0 */@Servicepublic class LoginServiceImpl implements LoginService { @Autowired private TbUserMapper userMapper; @Autowired//注入redis private JedisClient jedisClient; @Override public E3Result userLogin(String username, String password) { // 1、判断用户和密码是否正确 //根据用户名查询用户信息 TbUserExample example = new TbUserExample(); Criteria criteria = example.createCriteria(); criteria.andUsernameEqualTo(username); //执行查询 List<TbUser> list = userMapper.selectByExample(example); if (list == null || list.size() == 0) { //返回登录失败 return E3Result.build(400, "用户名或密码错误"); } //取用户信息 TbUser user = list.get(0); //判断密码是否正确 if (!DigestUtils.md5DigestAsHex(password.getBytes()).equals(user.getPassword())) { // 2、如果不正确,返回登录失败 return E3Result.build(400, "用户名或密码错误"); } // 3、如果正确生成token。 String token = UUID.randomUUID().toString(); // 4、把用户信息写入redis,key:token value:用户信息 user.setPassword(null);//密码不带回客户端 jedisClient.set("SESSION:" + token, JsonUtils.objectToJson(user)); // 5、设置Session的过期时间 jedisClient.expire("SESSION:" + token, 1800); // 6、把token返回 return E3Result.ok(token); }}@Controllerpublic class LoginController { @Autowired private LoginService loginService; @RequestMapping("/page/login") public String showLogin(String redirect, Model model) { model.addAttribute("redirect", redirect); return "login"; } @RequestMapping(value="/user/login", method=RequestMethod.POST) @ResponseBody public E3Result login(String username, String password, HttpServletRequest request, HttpServletResponse response) { E3Result e3Result = loginService.userLogin(username, password); //判断是否登录成功 if(e3Result.getStatus() == 200) { String token = e3Result.getData().toString(); //如果登录成功需要把token写入cookie CookieUtils.setCookie(request, response, "token", token); } //返回结果 return e3Result; }}浏览器不允许跨域请求在每个页面获取用户信息,解决跨域问题是要jsonp,每个页面跨域引入这个js文件来获取用户信息还需要引入jquery.cookie.js和jquery-1.4.2.min.jsvar E3MALL = { checkLogin : function(){ var _ticket = $.cookie("token"); if(!_ticket){ return ; } $.ajax({ url : "http://localhost:8088/user/token/" + _ticket, dataType : "jsonp", type : "GET", success : function(data){ if(data.status == 200){ var username = data.data.username; var html = username ; $("#loginbar").html(html); } } }); }}$(function(){ // 查看是否已经登录,如果已经登录查询登录信息 E3MALL.checkLogin();});/** * 根据token查询用户信息Controller * <p>Title: TokenController</p> */@Controllerpublic class TokenController { @Autowired private TokenService tokenService; /*@RequestMapping(value="/user/token/{token}", produces=MediaType.APPLICATION_JSON_UTF8_VALUE) @ResponseBody public String getUserByToken(@PathVariable String token, String callback) { E3Result result = tokenService.getUserByToken(token); //响应结果之前,判断是否为jsonp请求 if (StringUtils.isNotBlank(callback)) { //把结果封装成一个js语句响应 return callback + "(" + JsonUtils.objectToJson(result) + ");"; } return JsonUtils.objectToJson(result); }*/ @RequestMapping(value="/user/token/{token}") @ResponseBody public Object getUserByToken(@PathVariable String token, String callback) { E3Result result = tokenService.getUserByToken(token); //响应结果之前,判断是否为jsonp请求 if (StringUtils.isNotBlank(callback)) { //把结果封装成一个js语句响应 MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(result); mappingJacksonValue.setJsonpFunction(callback); return mappingJacksonValue; } return result; }}/** * 根据token取用户信息 */@Servicepublic class TokenServiceImpl implements TokenService { @Autowired private JedisClient jedisClient; @Value("${SESSION_EXPIRE}") private Integer SESSION_EXPIRE; @Override public E3Result getUserByToken(String token) { //根据token到redis中取用户信息 String json = jedisClient.get("SESSION:" + token); //取不到用户信息,登录已经过期,返回登录过期 if (StringUtils.isBlank(json)) { return E3Result.build(201, "用户登录已经过期"); } //取到用户信息更新token的过期时间 jedisClient.expire("SESSION:" + token, SESSION_EXPIRE); //返回结果,E3Result其中包含TbUser对象 TbUser user = JsonUtils.jsonToPojo(json, TbUser.class); return E3Result.ok(user); }}
阅读全文
0 0
- 用户登录操作
- 用户登录操作
- 记录用户登录操作
- linux登录用户及操作
- 避免非登录用户操作的过滤器
- 模拟Windows登录用户进行特殊操作
- XML操作举例→实现用户登录
- Linux登录用户查看及相应操作
- 3/用户登录(二):保存用户操作日志的方法
- 使用PreparedStatement实现查询操作系列一-----用户登录操作
- 用户登录
- 用户登录
- 用户登录
- 用户登录
- 用户登录
- 用户登录
- 用户登录
- 用户登录
- 【JZOJ 5411】【NOIP2017提高A组集训10.22】友谊
- DEVONthink Pro Office 2.9.16 for Mac 简体 中文版 自适应简/繁中文系统
- 洛谷P3905 道路重建
- 数据结构-栈&队列&Deque实现比较
- vbox里面Ubuntu虚拟机与主机Windows之间设置共享文件夹
- 用户登录操作
- Jzoj4736 漆黑列车载运数个谎言(GOSICK系列)
- 基于java的设计模式(3)工厂
- Matlab基于主分量的人脸重建显示
- CentOS 7.3下使用yum安装MySQL
- 顺序栈
- CMN题目描述
- 蚁群算法及其应用
- v-if和v-show区别