概述
现在前后端不分离的项目一般后台是用springsecurity来做权限认证,前台就是用户登录注册配合着拦截器,那么这块逻辑应该怎样写那?数据库怎么设计那?要注意那些问题那?
技术栈
数据库用的是mysql,数据库框架用的mybatisplus,项目架构就是普通的springboot项目,前后端不分离
数据库设计
数据库
用户这里的信息我设计的比较复杂,也可以写的更简单一些
java实体类
/**
* 用户
*/
@Data
public class User {
@TableId
private Integer userId;
private String username;//用户名
private String password;//密码
private String QQNumber;//QQ号
private String phone;//手机号
private String email;//邮箱
private String sex;//性别
private String birthday;//生日
private String age;//年龄
private String job;//职业
private String addressCountry;//国家
private String addressProvince;//省份
private String addressCity;//城市
private String myDesc;//自我介绍
private boolean active; //是否激活
}
逻辑实现
mapper接口
public interface UserMapper extends BaseMapper<User> {
}
service服务层
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public UserResult login(String username, String password) {
User user = null;
//通过用户名查询用户
if (user == null) {
QueryWrapper<User> queryWrapper1 = new QueryWrapper<>();
queryWrapper1.eq("username", username);
user = userMapper.selectOne(queryWrapper1);
}
//通过用户QQ号
if (user == null) {
QueryWrapper<User> queryWrapper2 = new QueryWrapper<>();
queryWrapper2.eq("QQNumber", username);
user = userMapper.selectOne(queryWrapper2);
}
//通过用户手机号
if (user == null) {
QueryWrapper<User> queryWrapper3 = new QueryWrapper<>();
queryWrapper3.eq("phone", username);
user = userMapper.selectOne(queryWrapper3);
}
//通过用户邮箱
if (user == null) {
QueryWrapper<User> queryWrapper4 = new QueryWrapper<>();
queryWrapper4.eq("email", username);
user = userMapper.selectOne(queryWrapper4);
}
//判断是否有该用户
if (user == null) {
return new UserResult(false, "用户名不存在");
}
//判断用户是否激活
if(!user.isActive()){
return new UserResult(false, "用户未激活");
}
//验证密码
if (!Md5Util.verify(password,user.getPassword())) {
return new UserResult(false, "用户密码错误");
}
return new UserResult(true, "登录成功", user);
}
//测试开发阶段,暂时不用邮件验证激活用户,默认激活
public UserResult register(User user){
//用户名是否重复
QueryWrapper<User> queryWrapper1 = new QueryWrapper();
queryWrapper1.eq("username",user.getUsername());
List<User> users1 = userMapper.selectList(queryWrapper1);
if(users1.size()>0){
return new UserResult(false,"用户名已存在");
}
//QQ号是否重复
QueryWrapper<User> queryWrapper2 = new QueryWrapper();
queryWrapper2.eq("QQNumber",user.getQQNumber());
List<User> users2 = userMapper.selectList(queryWrapper2);
if(users2.size()>0){
return new UserResult(false,"QQ号已存在");
}
//手机号是否重复
QueryWrapper<User> queryWrapper3 = new QueryWrapper();
queryWrapper3.eq("phone",user.getPhone());
List<User> users3 = userMapper.selectList(queryWrapper3);
if(users3.size()>0){
return new UserResult(false,"手机号已存在");
}
//邮箱是否重复
QueryWrapper<User> queryWrapper4 = new QueryWrapper();
queryWrapper4.eq("email",user.getEmail());
List<User> users4 = userMapper.selectList(queryWrapper4);
if(users4.size()>0){
return new UserResult(false,"邮箱已存在");
}
//加密密码,保存用户
String password=user.getPassword();
password= Md5Util.encode(password);
user.setPassword(password);
//测试开发阶段,暂时不用邮件验证激活用户
user.setActive(true);
//添加该用户
userMapper.insert(user);
return new UserResult(true,"登录成功");
}
public void add(User user) {
//加密密码,保存用户
String password=user.getPassword();
password= Md5Util.encode(password);
user.setPassword(password);
//测试开发阶段,暂时不用邮件验证激活用户
user.setActive(true);
userMapper.insert(user);
}
public void update(User user) {
//查询用户密码,如果密码和以前一样,则不做处理,若不同则加密更新
User user1 = userMapper.selectById(user.getUserId());
if(!user1.getPassword().equals(user.getPassword())){
//加密密码,保存用户
String password=user.getPassword();
password= Md5Util.encode(password);
user.setPassword(password);
}
user.setActive(true);
userMapper.updateById(user);
}
public void delete(Integer userId) {
userMapper.deleteById(userId);
}
public User findById(Integer userId) {
return userMapper.selectById(userId);
}
public List<User> findAll() {
return userMapper.selectList(null);
}
public Page<User> search(int page, int size) {
return userMapper.selectPage(new Page<>(page, size), null);
}
public Integer findNumber() {
return userMapper.selectCount(null);
}
public void updateStatus(Integer id) {
User user = userMapper.selectById(id);
user.setActive(!user.isActive());
userMapper.updateById(user);
}
}
控制层
@Controller
@RequestMapping("/front/user")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/register")
public ModelAndView register(User user,HttpSession session){
ModelAndView modelAndView=new ModelAndView();
UserResult register = userService.register(user);
if(!register.isFlag()){
modelAndView.addObject("message2",register.getMessage());
modelAndView.setViewName("/frontPage/user_login");
return modelAndView;
}else{
modelAndView.setViewName("/frontPage/user_login");
}
return modelAndView;
}
/**
* 登录
* @param username 用户名
* @param password 密码
* @param session
* @return
*/
@RequestMapping("/login")
public ModelAndView login(String username, String password, HttpSession session){
ModelAndView modelAndView=new ModelAndView();
UserResult userResult = userService.login(username, password);
//登录失败
if(!userResult.isFlag()){
modelAndView.addObject("message1",userResult.getMessage());
modelAndView.setViewName("/frontPage/user_login");
return modelAndView;
}else {
session.setAttribute("user",userResult.getData());
modelAndView.setViewName("redirect:/front/index");
}
return modelAndView;
}
/**
* 提出登录
* @param session
* @return
*/
@RequestMapping("/logout")
public String logout(HttpSession session) {
session.removeAttribute("user");
return "redirect:/front/index";
}
@RequestMapping("/info")
public ModelAndView info(HttpSession session){
ModelAndView modelAndView=new ModelAndView();
User user = (User) session.getAttribute("user");
modelAndView.addObject("user",user);
modelAndView.setViewName("/frontPage/user_info");
return modelAndView;
}
@RequestMapping("/update")
public String update(User user,HttpSession session){
userService.update(user);
session.removeAttribute("user");
return "redirect:/front/index";
}
}