项目实训(1)- 登录注册功能


前言

项目实训,山大云会议。
在本篇博客中,会展示登录注册功能的部分代码。yml文件和pom文件就不展示了

一、UserController

package com.meeting.login_register_simple.controller;

import com.meeting.login_register_simple.entity.ResponseData;
import com.meeting.login_register_simple.entity.User;
import com.meeting.login_register_simple.exception.UserExistException;
import com.meeting.login_register_simple.service.UserService;
import com.meeting.login_register_simple.util.JwtTokenUtil;
import com.meeting.login_register_simple.util.Md5Util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@CrossOrigin(origins = {"*"})
public class UserController {

    @Autowired
    private UserService userService;

    @Autowired
    private JwtTokenUtil jwtTokenUtil;

    @Autowired
    private Md5Util md5Util;

    private final static String EMAIL_PATTERN = "@mail.sdu.edu.cn";

    @ResponseBody
    @PostMapping("/login")
    public ResponseData login(@RequestParam("text") String text,
                              @RequestParam("password") String password) {
        ResponseData responseData;
        User user;
        if (checkValidEmail(text)) {
            user = userService.loadUserByEmail(text);
        } else {
            user = userService.loadUserByUsername(text);
        }
        if (user != null) {
            if (md5Util.verify(password, user.getPassword())) {
                responseData = new ResponseData(200, "ok");
                responseData.getData().put("token", jwtTokenUtil.generateToken(user));
            } else {
                responseData = new ResponseData(400, "密码错误");
            }
        } else {
            responseData = new ResponseData(400, "用户名或者邮箱不存在");
        }
        return responseData;
    }

    @ResponseBody
    @PostMapping("/register")
    public ResponseData register(@RequestParam("username") String username,
                                 @RequestParam("password") String password,
                                 @RequestParam("email") String email) {
        ResponseData responseData;
        if (isStringEmpty(username)
                || isStringEmpty(password)
                || isStringEmpty(email)) {
            responseData = new ResponseData(400, "不能为空");
            return responseData;
        }
        if (!checkValidLength(username, password, email)) {
            responseData = new ResponseData(400, "长度问题");
            return responseData;
        }
        if (!checkValidEmail(email)) {
            responseData = new ResponseData(400, "不支持的邮件格式");
            return responseData;
        }
        try {
            long uid = userService.register(username, md5Util.encrypt(password), email);
            responseData = new ResponseData(200, "ok");
            responseData.getData().put("uid", uid);
            return responseData;
        } catch (UserExistException exception) {
            responseData = new ResponseData(400, exception.getMsg());
            return responseData;
        }
    }

    private boolean isStringEmpty(String string) {
        return string == null || "".equals(string);
    }

    private boolean checkValidLength(String username, String password, String email) {
        return username.length() <= 32 && password.length() <= 32 && email.length() <= 64;
    }

    private boolean checkValidEmail(String email) {
        return email.endsWith(EMAIL_PATTERN);
    }

}

二、entity(实体)

1. User

package com.meeting.login_register_simple.entity;

import java.util.List;

public class User {

    private Long id;
    private String username;
    private String email;
    private String password;
    private String profile;
    private List<Role> authorities;

    public User() {}

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getProfile() {
        return profile;
    }

    public void setProfile(String profile) {
        this.profile = profile;
    }

    public List<Role> getAuthorities() {
        return authorities;
    }

    public void setAuthorities(List<Role> authorities) {
        this.authorities = authorities;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", email='" + email + '\'' +
                ", password='" + password + '\'' +
                ", authorities=" + authorities +
                '}';
    }

}

2. Role(角色)

package com.meeting.login_register_simple.entity;

public class Role {

    private Long id;
    private String authority;

    public Role() {}

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getAuthority() {
        return authority;
    }

    public void setAuthority(String authority) {
        this.authority = authority;
    }

    @Override
    public String toString() {
        return "Role{" +
                "id=" + id +
                ", authority='" + authority + '\'' +
                '}';
    }

}

2. UserRole

package com.meeting.login_register_simple.entity;

public class UserRole {

    private Long uid;
    private Long rid;

    public UserRole() {}

    public Long getUid() {
        return uid;
    }

    public void setUid(Long uid) {
        this.uid = uid;
    }

    public Long getRid() {
        return rid;
    }

    public void setRid(Long rid) {
        this.rid = rid;
    }

    @Override
    public String toString() {
        return "UserRole{" +
                "uid=" + uid +
                ", rid=" + rid +
                '}';
    }

}

三、mapper层

这里只展示xxxMapper.xml文件

1. UserMapper

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.meeting.login_register_simple.mapper.UserMapper">

    <resultMap id="user" type="com.meeting.login_register_simple.entity.User">
        <id property="id" column="user_id" />
        <result property="username" column="username" />
        <result property="email" column="email" />
        <result property="password" column="password" />
        <result property="profile" column="profile" />
    </resultMap>
    
    <select id="findUserById" parameterType="Long" resultMap="user">
        SELECT `user_id`, `username`, `password`, `email`, `profile`
        FROM `user`
        WHERE `user_id` = #{id}
    </select>

    <select id="findUserByUsername" parameterType="String" resultMap="user">
        SELECT `user_id`, `username`, `password`, `email`, `profile`
        FROM `user`
        WHERE `username` = #{username}
    </select>

    <select id="findUserByEmail" parameterType="String" resultMap="user">
        SELECT `user_id`, `username`, `password`, `email`, `profile`
        FROM `user`
        WHERE `email` = #{email}
    </select>

    <insert id="insertUser" parameterType="com.meeting.login_register_simple.entity.User"
            useGeneratedKeys="true" keyProperty="id" keyColumn="user_id">
        INSERT INTO `user` (`username`, `password`, `email`, `profile`)
        VALUES (#{user.username}, #{user.password}, #{user.email}, #{user.profile})
    </insert>

    <update id="updateUser" parameterType="com.meeting.login_register_simple.entity.User">
        UPDATE `user`
        SET `username` = #{user.username},
            `password` = #{user.password},
            `email` = #{user.email},
            `profile` = #{user.profile}
        WHERE `user_id` = #{user.id}
    </update>

</mapper>

2. RoleMapper

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.meeting.login_register_simple.mapper.RoleMapper">

    <resultMap id="role" type="com.meeting.login_register_simple.entity.Role">
        <id property="id" column="role_id" />
        <result property="authority" column="authority" />
    </resultMap>

    <select id="findRoleById" parameterType="Long" resultMap="role">
        SELECT `role_id`, `authority`
        FROM `role`
        WHERE `role_id` = #{id}
    </select>

    <select id="findRoleByAuthority" parameterType="String" resultMap="role">
        SELECT `role_id`, `authority`
        FROM `role`
        WHERE `authority` = #{authority}
    </select>

    <insert id="insertRole" parameterType="com.meeting.login_register_simple.entity.Role"
            useGeneratedKeys="true" keyProperty="id" keyColumn="role_id">
        INSERT INTO `role` (`authority`)
        VALUES (`role.authority`)
    </insert>

    <update id="updateRole" parameterType="com.meeting.login_register_simple.entity.Role">
        UPDATE `role`
        SET `authority` = #{role.authority}
        WHERE `role_id` = #{role.id}
    </update>

</mapper>

3. UserRoleMapper

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.meeting.login_register_simple.mapper.UserRoleMapper">

    <resultMap id="user_role" type="com.meeting.login_register_simple.entity.UserRole">
        <id property="uid" column="user_id" />
        <id property="rid" column="role_id" />
    </resultMap>

    <select id="findUserRoleByUidAndRid" parameterType="Long" resultMap="user_role">
        SELECT `user_id`, `role_id`
        FROM `user_role`
        WHERE `user_id` = #{uid}
          AND `role_id` = #{rid}
    </select>

    <select id="findUserRolesByUid" parameterType="Long" resultMap="user_role">
        SELECT `user_id`, `role_id`
        FROM `user_role`
        WHERE `user_id` = #{uid}
    </select>

    <insert id="insertUserRole" parameterType="Long">
        INSERT INTO `user_role` (`user_id`, `role_id`)
        VALUES (#{uid}, #{rid})
    </insert>

    <insert id="insertNormalUser" parameterType="Long">
        INSERT INTO `user_role` (`user_id`, `role_id`)
        VALUES (#{uid}, 1)
    </insert>

</mapper>

四、mapper层

1. UserService

package com.meeting.login_register_simple.service;

import com.meeting.login_register_simple.entity.Role;
import com.meeting.login_register_simple.entity.User;
import com.meeting.login_register_simple.entity.UserRole;
import com.meeting.login_register_simple.exception.UserExistException;
import com.meeting.login_register_simple.mapper.RoleMapper;
import com.meeting.login_register_simple.mapper.UserMapper;
import com.meeting.login_register_simple.mapper.UserRoleMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    @Autowired
    private RoleMapper roleMapper;

    @Autowired
    private UserRoleMapper userRoleMapper;

    @Transactional(rollbackFor = RuntimeException.class)
    public User loadUserByUsername(String username) {
        User user = userMapper.findUserByUsername(username);
        if (user == null) {
            return user;
        }
        Long uid = user.getId();
        List<Role> authorities = new ArrayList<>();
        List<UserRole> userRoles = userRoleMapper.findUserRolesByUid(uid);
        for (UserRole userRole : userRoles) {
            authorities.add(roleMapper.findRoleById(userRole.getRid()));
        }
        user.setAuthorities(authorities);
        return user;
    }

    @Transactional(rollbackFor = RuntimeException.class)
    public User loadUserByEmail(String email) {
        User user = userMapper.findUserByEmail(email);
        if (user == null) {
            return user;
        }
        Long uid = user.getId();
        List<Role> authorities = new ArrayList<>();
        List<UserRole> userRoles = userRoleMapper.findUserRolesByUid(uid);
        for (UserRole userRole : userRoles) {
            authorities.add(roleMapper.findRoleById(userRole.getRid()));
        }
        user.setAuthorities(authorities);
        return user;
    }

    @Transactional(rollbackFor = RuntimeException.class)
    public Long register(String username, String password, String email) {
        if ((userMapper.findUserByUsername(username)) != null) {
            throw new UserExistException("用户名已经存在");
        }
        if ((userMapper.findUserByEmail(email)) != null) {
            throw new UserExistException("邮箱已经存在");
        }
        User user = new User();
        user.setUsername(username);
        user.setEmail(email);
        user.setPassword(password);
        user.setProfile("default.png");
        userMapper.insertUser(user);
        userRoleMapper.insertNormalUser(user.getId());
        return user.getId();
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东羚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值