ユーザーログイン操作
10198 ワード
public interface LoginService {
// :
// :
/*
* 1、
* 2、 ,
* 3、 token。
* 4、 redis,key:token, value:
* 5、 Session
* 6、 token
*/
// :E3Result, token
E3Result userLogin(String username, String password);
}
/**
*
* Title: LoginServiceImpl
* Description:
* @version 1.0
*/
@Service
public 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 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);
}
}
@Controller
public 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.js
var 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
* Title: TokenController
*/
@Controller
public 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
*/
@Service
public 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);
}
}