之前在i西科的项目里看到了这样一段代码
注释里说的很清楚,就是用来验证用户登陆的。他这里用了登陆凭证的方式来验证登陆,而我之前写的项目里都是直接在服务器上保存session,于是我去查了一下这两种方式的区别,这里大致介绍一下。
先来看使用session验证的代码:
请求体:
/**
* 用户登陆请求体
*
* @author xuLiang
* @since 0.0.1
*/
public class UserLogin {
private Long id;
private String password;
getters and setters...
}
DAO层:
/**
*
* 查找登陆用户账号密码是否匹配
*
* @param userLogin
* 用户登陆请求体
* @return true or false
* @author xuLiang
* @since 0.0.1
*/
@Override
public boolean findByIdAndPassword(UserLogin userLogin) {
UsersRecord record = dsl.selectFrom(USERS)
.where(USERS.ID.eq(userLogin.getId()).and(USERS.PASSWORD.eq(userLogin.getPassword()))).fetchOne();
if (record != null) {
return true;
}
return false;
}
service层:
/**
*
* 验证用户登陆
*
* @param userLogin
* 用户登陆请求体
* @return true or false
* @author xuLiang
* @since 0.0.1
*/
@Override
public boolean verifyLogin(UserLogin userLogin) {
return usersMapper.findByIdAndPassword(userLogin);
}
controller:
/**
* 用户登陆验证
*
* @param userLogin
* 用户登录请求体
* @return SESSION
* @author xuLiang
* @since 0.0.1
*/
@PostMapping("/loginVerify")
@ResponseStatus(HttpStatus.OK)
public String loginVerify(@RequestBody UserLogin userLogin, HttpSession session) {
boolean verify = userPersonService.verifyLogin(userLogin);
if (verify) {
session.setAttribute(WebSecurityConfig.SESSION_KEY, userLogin.getId());
return "index";
}
return "redirect:/login";
}
/**
* 用户登出移除session
*
* @param userLogin
* 用户登录请求体
* @return SESSION
* @author xuLiang
* @since