首页 > 代码库 > 单点登录接口代码
单点登录接口代码
package com.taotao.sso.service.impl;
service层:代码
import java.util.Date;
import java.util.List;
import java.util.UUID;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;
import com.taotao.common.utils.JsonUtils;
import com.taotao.common.utils.TaotaoResult;
import com.taotao.mapper.TbUserMapper;
import com.taotao.pojo.TbUser;
import com.taotao.pojo.TbUserExample;
import com.taotao.pojo.TbUserExample.Criteria;
import com.taotao.sso.dao.JedisClient;
import com.taotao.sso.service.UserService;
//service层进行数据库的校验
@Service
public class UserServiceImpl implements UserService {
@Autowired
private TbUserMapper userMapper;
@Autowired
private JedisClient jedisClient;
@Value("${REDIS_SESSION_TOKEN}")
private String REDIS_SESSION_TOKEN;
@Value("${REDSI_SESSION_TIME}")
private Integer REDSI_SESSION_TIME;
public TaotaoResult checkData(String param, Integer type) {
TbUserExample example=new TbUserExample();
Criteria criteria=example.createCriteria();
//1代表用户名,2代表电话,3代表邮箱
if (1==type) {
criteria.andUsernameEqualTo(param);
}else if (2==type) {
criteria.andPhoneEqualTo(param);
}else{
criteria.andEmailEqualTo(param);
}
List<TbUser> result= userMapper.selectByExample(example);
if(result==null || result.size()==0){
return TaotaoResult.ok(true);
}else{
return TaotaoResult.ok(false);
}
}
//用户注册接口实现类
@Override
public TaotaoResult loginData(TbUser user) {
user.setUpdated(new Date());
user.setCreated(new Date());
//spring提供了一个MD5加密密码的方式
user.setPassword("DigestUtils..md5DigestAsHex(user.getPassword().getBytes())");
userMapper.insert(user);
return TaotaoResult.ok();
}
//登录接口的实现逻辑
@Override
public TaotaoResult userLogin(String username, String password) {
//先查询数据库中是否存在此用户名,若存在则表示用户名正确,再验证密码是否跟数据库中的MD5加密后的是否一样,都满足则登录成功,给予访问者一个token令牌,并将token令牌写入redis
TbUserExample example=new TbUserExample();
Criteria criteria=example.createCriteria();
criteria.andUsernameEqualTo(username);
//返回值的快捷键alt+shift+L
List<TbUser> list = userMapper.selectByExample(example);
if (list==null || list.size()==0) {
TaotaoResult.build(400,"用户名或密码不存在");
}
//根据用户名查询只能查询到一条记录,所以获取当前这个对象的信息,就是list.get(0)
TbUser user=list.get(0);
if(DigestUtils.md5DigestAsHex(password.getBytes())!=user.getPassword() ) {
TaotaoResult.build(400,"用户名或密码不存在");
}
//将密码保存到redis比较危险,所以这里在保存之前将密码去掉
user.setPassword(null);
//否则用户名和密码都正确,则可以登录,办法token令牌
String token=UUID.randomUUID().toString();
//将token写入redis中,写入的方法要记住。要用到redis的客户端jedis.value的值是序列号的形式
jedisClient.set(REDIS_SESSION_TOKEN+":"+token, JsonUtils.objectToJson(user));
//设置session的过期时间
jedisClient.expire(REDIS_SESSION_TOKEN+":"+token, REDSI_SESSION_TIME);
//返回token
return TaotaoResult.ok(token);
}
//根据token判断用户是否已经登录
@Override
public TaotaoResult userByToken(String token) {
//从redis中获取token的信息,判断用户是否过期,如果没有过期则更新session时间
String json = jedisClient.get(REDIS_SESSION_TOKEN+":"+token);
if (StringUtils.isBlank(json)) {
return TaotaoResult.build(400,"session已经过期,请重新登录");
}
//如果没有过期,则更新session时间
jedisClient.expire(REDIS_SESSION_TOKEN+":"+token,REDSI_SESSION_TIME);
//返回给controller层的是json数据
return TaotaoResult.ok(JsonUtils.jsonToPojo(json, TbUser.class));
}
}
package com.taotao.sso.controller; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.converter.json.MappingJacksonValue; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import com.taotao.common.utils.ExceptionUtil; import com.taotao.common.utils.TaotaoResult; import com.taotao.pojo.TbUser; import com.taotao.sso.service.UserService; @Controller @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @RequestMapping("/check/{param}/{type}") @ResponseBody public Object checkDate(@PathVariable String param ,@PathVariable Integer type,String callback){ TaotaoResult result=null; if (param==null) { result=TaotaoResult.build(400,"校验内容不能为空"); } if(type==null){ result=TaotaoResult.build(400,"校验内容不能为空"); } if( type!=1 && type !=2 && type !=3){ result=TaotaoResult.build(400, "校验内容类型错误"); } //校验出错 if (null != result) { if (null != callback) { MappingJacksonValue mappingJacksonValue = http://www.mamicode.com/new MappingJacksonValue(result);"/register",method=RequestMethod.POST) @ResponseBody public TaotaoResult loginData(TbUser user){ //利用try catch捕获异常 try { TaotaoResult result=userService.loginData(user); return result; } catch (Exception e) { e.printStackTrace(); return TaotaoResult.build(500,ExceptionUtil.getStackTrace(e)); } } //登录接口的编写,接口文档提示是post请求,如果不写post则get和post都可以,一般如果接口明确写了则要写post方法 @RequestMapping(value="http://www.mamicode.com/login",method=RequestMethod.POST) @ResponseBody public TaotaoResult userLogin(String username,String password){ try { TaotaoResult result=userService.userLogin(username, password); return result; } catch (Exception e) { e.printStackTrace(); return TaotaoResult.build(400,ExceptionUtil.getStackTrace(e)); } } @RequestMapping("/token/{token}") @ResponseBody public Object userByToken(@PathVariable String token,String callback){ TaotaoResult result=null; try { result=userService.userByToken(token); } catch (Exception e) { e.printStackTrace(); result=TaotaoResult.build(500,ExceptionUtil.getStackTrace(e)); } if (StringUtils.isBlank(callback)) { return result; }else{ MappingJacksonValue mappingJacksonValue=http://www.mamicode.com/new MappingJacksonValue(result);>
单点登录接口代码
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。