• shop--14.升级--本地账号注册,登录,修改密码


    Dao层

    本地账户LocalUser

    @Repository
    public interface LocalUserDao {
        
        /**
         * 根据传入的用户名和密码查询对应的信息,登录时使用
         * @param username
         * @param password
         * @return
         */
        LocalUser queryLocalUserByUserNameAndPWd(@Param( "username" ) String username,
                                                 @Param( "password" ) String password);
    
        /**
         * 通过userId查询用户信息
         * @param userId
         * @return
         */
        LocalUser queryLocalUserByUserId(@Param( "userId" ) long userId);
    
        /**
         * 添加本地账号
         * @param localUser
         * @return
         */
        int insertLocalUser(LocalUser localUser);
        
        /**
         * 通过userId,username,password确定要修改密码的用户,然后进行密码的修改
         * @param userId
         * @param username
         * @param password
         * @param newPassword
         * @param lastEditTime
         * @return
         */
        int updateLocalUser(@Param( "userId" ) Long userId,
                            @Param( "username" ) String username,
                            @Param( "password" ) String password,
                            @Param( "newPassword" ) String newPassword,
                            @Param( "lastEditTime" ) Date lastEditTime);
    }
    

     

    用户详细信息 

    PersonInfoDao

    @Repository
    public interface PersonInfoDao {
    
        /**
         * 注册用户信息
         * @param personInfo
         * @return
         */
        int registerPersonInfo(PersonInfo personInfo);
    
        /**
         * 获取最新注册的用户Id
         * @return
         */
        long qyeryNewRegisterId();
    }
    

      

    LocalUserDao.xml

    <?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.shop.dao.LocalUserDao">
    
        <resultMap id="localUserResultMap" type="com.shop.bean.LocalUser">
            <id column="local_user_id" property="localUserId"/>
            <result column="user_name" property="username"/>
            <result column="password" property="password"/>
            <result column="create_time" property="createTime"/>
            <result column="last_edit_time" property="lastEditTime"/>
            <association column="user_id" property="personInfo"
                         javaType="com.shop.bean.PersonInfo">
                <id column="user_id" property="userId"/>
                <result column="nick_name" property="nickname"/>
                <result column="gender" property="gender"/>
                <result column="email" property="email"/>
                <result column="photo" property="photo"/>
                <result column="user_type" property="userType"/>
                <result column="create_time" property="createTime"/>
                <result column="last_edit_time" property="lastEditTime"/>
                <result column="status" property="status"/>
            </association>
        </resultMap>
        <!--LocalUser queryLocalUserByUserNameAndPWd(@Param( "username" ) String username,
                                                     @Param( "password" ) String password);-->
        <select id="queryLocalUserByUserNameAndPWd" resultMap="localUserResultMap">
            SELECT
            l.local_user_id,
            l.user_name,
            l.password,
            l.create_time,
            l.last_edit_time,
            p.user_id,
            p.nick_name,
            p.gender,
            p.email,
            p.photo,
            p.user_type,
            p.create_time,
            p.last_edit_time,
            p.status
            FROM local_user l
            LEFT JOIN person_info p
            ON l.user_id=p.user_id
            WHERE
            l.user_name=#{username}
            AND
            l.password=#{password}
        </select>
    
    
    
        <!--LocalUser queryLocalUserByUserId(long userId);-->
        <select id="queryLocalUserByUserId" resultMap="localUserResultMap" parameterType="Long">
            SELECT
            l.local_user_id,
            l.user_name,
            l.password,
            l.create_time,
            l.last_edit_time,
            p.user_id,
            p.nick_name,
            p.gender,
            p.email,
            p.photo,
            p.user_type,
            p.create_time,
            p.last_edit_time,
            p.status
            FROM local_user l
            LEFT JOIN person_info p
            ON l.user_id=p.user_id
            WHERE
            l.user_id=#{userId}
        </select>
    
    
        <!--int insertLocalUser(LocalUser localUser);-->
        <insert id="insertLocalUser" parameterType="com.shop.bean.LocalUser"
                useGeneratedKeys="true" keyColumn="local_user_id" keyProperty="localUserId">
            INSERT INTO
            local_user(user_name, password, user_id, create_time, last_edit_time)
            VALUES(#{username}, #{password}, #{personInfo.userId}, #{createTime}, #{lastEditTime})
        </insert>
    
        <!--int updateLocalUser(@Param( "userId" ) Long userId,
                            @Param( "username" ) String username,
                            @Param( "password" ) String password,
                            @Param( "newPassword" ) String newPassword,
                            @Param( "lastEditTime" ) Date lastEditTime);-->
        <update id="updateLocalUser">
            UPDATE local_user
            <set>
                <if test="newPassword != null">password=#{newPassword},</if>
                <if test="lastEditTime !=  null">last_edit_time=#{lastEditTime}</if>
            </set>
            WHERE
            user_id=#{userId}
            AND
            user_name=#{username}
            AND
            password=#{password}
    
        </update>
    </mapper>
    

      

    PersonInfoDao.xml

    <?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.shop.dao.PersonInfoDao">
    
        <!--int registerPersonInfo(PersonInfo personInfo);-->
        <insert id="registerPersonInfo" parameterType="com.shop.bean.PersonInfo"
                useGeneratedKeys="true" keyColumn="user_id" keyProperty="userId">
            INSERT INTO
            person_info(nick_name, photo, email, gender, status, user_type, create_time, last_edit_time)
            VALUES(#{nickname}, #{photo}, #{email}, #{gender}, #{status}, #{userType}, #{createTime}, #{lastEditTime})
        </insert>
    
    
        <!--long qyeryNewRegisterId();-->
        <select id="qyeryNewRegisterId" resultType="Long">
            SELECT MAX(user_id)
            FROM person_info
        </select>
    
    </mapper>
    

     

    Service层开发

    package com.shop.service;
    
    import com.shop.bean.LocalUser;
    import com.shop.dto.LocalUserExecution;
    import org.springframework.web.multipart.commons.CommonsMultipartFile;
    
    /**
     * Created by Skye on 2018/5/14.
     */
    public interface LocalUserService {
    
    
        /**
         * 根据传入的用户名和密码查询对应的信息,登录时使用
         * @param username
         * @param password
         * @return
         */
        LocalUser getLocalUserByUserNameAndPwd(String username, String password);
    
    
        /**
         * 通过userId获取本地账号信息
         * @param userId
         * @return
         */
        LocalUser getLocalUserByUserId(long userId);
    
    
        /**
         * 修改本地账号的密码
         * @param userId
         * @param username
         * @param password
         * @param newPassword
         * @return
         */
        LocalUserExecution modyfiLocalUser(long userId, String username, String password, String newPassword);
    
    
        /**
         * 本地用户注册,和用户头像上传
         * @param localUser
         * @param photo
         * @return
         */
        LocalUserExecution registerLocalUser(LocalUser localUser, CommonsMultipartFile photo);
    
    }
    

      

      

    serviceImpl

    package com.shop.service.serviceImpl;
    
    import com.shop.bean.LocalUser;
    import com.shop.bean.PersonInfo;
    import com.shop.dao.LocalUserDao;
    import com.shop.dao.PersonInfoDao;
    import com.shop.dto.LocalUserExecution;
    import com.shop.enums.LocalUserStateEnum;
    import com.shop.execptions.LocalUserException;
    import com.shop.service.LocalUserService;
    import com.shop.util.ImageUtil;
    import com.shop.util.MD5;
    import com.shop.util.PathUtil;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import org.springframework.transaction.annotation.Transactional;
    import org.springframework.web.bind.annotation.ExceptionHandler;
    import org.springframework.web.multipart.commons.CommonsMultipartFile;
    
    import java.util.Date;
    
    /**
     * Created by Skye on 2018/5/14.
     */
    @Service
    public class LocalUserServiceImpl implements LocalUserService {
    
        @Autowired
        private LocalUserDao localUserDao;
    
        @Autowired
        private PersonInfoDao personInfoDao;
    
        @Override
        public LocalUser getLocalUserByUserNameAndPwd(String username, String password) {
            return localUserDao.queryLocalUserByUserNameAndPWd( username, MD5.getMd5(password) );
        }
    
        @Override
        public LocalUser getLocalUserByUserId(long userId) {
            return localUserDao.queryLocalUserByUserId( userId );
        }
    
        @Override
        public LocalUserExecution modyfiLocalUser(long userId, String username, String password, String newPassword) {
            //非空判断,并且新旧密码是否相同,若相同,则不进行修改
            if(userId != -1 && username != null && password != null && newPassword != null && !password.equals( newPassword )){
                try{
                    int effectNum = localUserDao.updateLocalUser( userId, username, MD5.getMd5( password ), MD5.getMd5( newPassword ), new Date(  ) );
                    if(effectNum <= 0){
                        throw new LocalUserException("密码更新失败");
                    }
                    return new LocalUserExecution(LocalUserStateEnum.SUCCESS);
                } catch(LocalUserException e){
                    throw new LocalUserException( "更新密码失败" + e.getMessage() );
                }
            } else{
                return new LocalUserExecution( LocalUserStateEnum.EMPTY_LOCALUSER_INFO );
            }
        }
    
        /**
         * 本地用户注册
         * @param localUser
         * @param photo
         * @return
         */
        @Override
        @Transactional
        public LocalUserExecution registerLocalUser(LocalUser localUser, CommonsMultipartFile photo) {
            if(localUser == null || localUser.getUsername() == null || localUser.getPassword() == null){
                return new LocalUserExecution( LocalUserStateEnum.EMPTY_LOCALUSER_INFO );
            }
    
            try{
                localUser.setCreateTime( new Date(  ) );
                localUser.setLastEditTime( new Date(  ) );
                localUser.setPassword( MD5.getMd5( localUser.getPassword()) );
    
                //将用户头像放入用户所在的文件夹下
                if(localUser.getPersonInfo() != null && localUser.getPersonInfo().getUserId() == null){
                    if(photo != null){
                        try{
                            addPhoto( localUser, photo );
                        } catch (Exception e){
                            throw new RuntimeException( "add photo error" + e.toString() );
                        }
                    }
                    localUser.getPersonInfo().setCreateTime( new Date(  ) );
                    localUser.getPersonInfo().setLastEditTime( new Date(  ) );
                    localUser.getPersonInfo().setStatus( 1 );
    
                    try{
                        //插入用户详细信息的数据到person_info
                        PersonInfo personInfo = localUser.getPersonInfo();
                        int effectNum = personInfoDao.registerPersonInfo( personInfo );
                        if(effectNum <= 0){
                            throw new RuntimeException( "添加用户信息失败" );
                        } else{
                            Long user_id = personInfoDao.qyeryNewRegisterId();
                            localUser.getPersonInfo().setUserId( user_id );
                        }
                    }catch(Exception e){
                        throw new RuntimeException( "insertPersonInfo error " + e.toString() );
                    }
                }
                // 然后在将用户注册信息插入到local_user中
                int effectNum = localUserDao.insertLocalUser( localUser );
                if(effectNum <= 0){
                    throw new RuntimeException( "创建账号失败" );
                } else{
                    return new LocalUserExecution( LocalUserStateEnum.SUCCESS );
                }
            } catch (Exception e){
                throw new RuntimeException( "insert localUser error " + e.toString() );
            }
        }
    
    
        /**
         * 将用户头像添加到用户的文件夹下,并将本地用户信息中的头像地址更新
         * @param localUser
         * @param photo
         */
        private void addPhoto(LocalUser localUser, CommonsMultipartFile photo){
            String relativeImgPath = PathUtil.getPersonInfoImagePath();
            String realRelativeImgPath = ImageUtil.generateThumbnail(photo, relativeImgPath);
            localUser.getPersonInfo().setPhoto( realRelativeImgPath );
        }
    
    }
    

      

      

    LocalUserExecution

    public class LocalUserExecution {
        private int state;
        private String stateInfo;
        private List<LocalUser> localUserList;
        private LocalUser localUser;
        private int count;
    
        public LocalUserExecution() {
        }
    
        //操作失败时,使用的构造器
        public LocalUserExecution(LocalUserStateEnum localUserEnum){
            this.state = localUserEnum.getState();
            this.stateInfo = localUserEnum.getStateInfo();
        }
    
        //操作成功时,使用的构造器
        public LocalUserExecution(LocalUserStateEnum localUserStateEnum, LocalUser localUser){
            this.state = localUserStateEnum.getState();
            this.stateInfo = localUserStateEnum.getStateInfo();
            this.localUser = localUser;
        }
    
        //操作成功时,使用的构造器
        public LocalUserExecution(LocalUserStateEnum localUserStateEnum, List<LocalUser> localUserList){
            this.state = localUserStateEnum.getState();
            this.stateInfo = localUserStateEnum.getStateInfo();
            this.localUserList = localUserList;
        }
    
        public int getState() {
            return state;
        }
        
        public String getStateInfo() {
            return stateInfo;
        }
        
        public int getCount() {
            return count;
        }
    
        public void setCount(int count) {
            this.count = count;
        }
    }
    

      

      

    LocalUserStateEnum

    package com.shop.enums;
    
    /**
     * Created by Skye on 2018/5/14.
     */
    public enum LocalUserStateEnum {
        SUCCESS(1, "操作成功"),
        INNER_ERROR(-1001, "内部错误"),
        EMPTY_LOCALUSER_INFO(-1002, "本地用户信息为空");
    
    
        private int state;
        private String stateInfo;
    
        LocalUserStateEnum(int state, String stateInfo) {
            this.state = state;
            this.stateInfo = stateInfo;
        }
    
        public int getState() {
            return state;
        }
    
        public String getStateInfo() {
            return stateInfo;
        }
    
    
        public static LocalUserStateEnum stateof(int state){
            for(LocalUserStateEnum s : values()){
                if(s.state == state){
                    return s;
                }
            }
            return null;
        }
    }
    

      

    LocalUserException

    package com.shop.execptions;
    
    /**
     * Created by Skye on 2018/5/14.
     */
    public class LocalUserException extends RuntimeException {
        private static final long serialVersionUID = -4908599956606896236L;
    
        public LocalUserException(String message) {
            super(message);
        }
    }
    

      

    Controller层

    package com.shop.controller.local;
    
    import com.fasterxml.jackson.databind.JavaType;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.shop.bean.LocalUser;
    import com.shop.bean.PersonInfo;
    import com.shop.dto.LocalUserExecution;
    import com.shop.enums.LocalUserStateEnum;
    import com.shop.execptions.LocalUserException;
    import com.shop.service.LocalUserService;
    import com.shop.util.CodeUtil;
    import com.shop.util.HttpServletRequestUtil;
    import com.shop.util.MD5;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.multipart.MultipartHttpServletRequest;
    import org.springframework.web.multipart.commons.CommonsMultipartFile;
    import org.springframework.web.multipart.commons.CommonsMultipartResolver;
    
    import javax.servlet.http.HttpServletRequest;
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * Created by Skye on 2018/5/14.
     */
    @Controller
    @RequestMapping("/local")
    public class LocalUserController {
    
        @Autowired
        LocalUserService localUserService;
    
        /**
         * 修改本地用户的登录密码
         * @param request
         * @return
         */
        @RequestMapping(value="/changelocalpwd", method= RequestMethod.POST)
        @ResponseBody
        private Map<String, Object> changeLocalPwd(HttpServletRequest request){
            Map<String, Object> modelMap = new HashMap<>();
            //验证码校验
            if(!CodeUtil.checkVerifyCode(request)){
                modelMap.put( "success", false );
                modelMap.put( "errMsg", "验证码错误" );
                return modelMap;
            }
            String username = HttpServletRequestUtil.getString( request, "username" );
            String password = HttpServletRequestUtil.getString( request, "password" );
            String newPassword = HttpServletRequestUtil.getString( request, "newPassword" );
    
    
            PersonInfo user = (PersonInfo) request.getSession().getAttribute( "user" );
            //非空判断
            if(username != null && password != null && newPassword != null
                    && user != null && user.getUserId() != null && !password.equals( newPassword ) ){
                try{
                    //通过系统传过来的userId来从数据库获取localUser,判断是否是本人操作,即用户名和密码是否存在且匹配
                    LocalUser localUser = localUserService.getLocalUserByUserId( user.getUserId() );
    
                    if(localUser == null || !localUser.getPassword().equals( MD5.getMd5(password) )){
                        modelMap.put( "success", false );
                        modelMap.put( "errMsg", "账号非本次登录账号" );
                        return modelMap;
                    }
                    //修改本地用户的密码
                    LocalUserExecution localUserExecution
                            = localUserService.modyfiLocalUser( user.getUserId(), username, password, newPassword );
                    if(localUserExecution.getState() == LocalUserStateEnum.SUCCESS.getState()){
                        modelMap.put( "success", true );
                    } else{
                        modelMap.put( "success", false );
                        modelMap.put( "errMsg", localUserExecution.getStateInfo() );
                    }
                }catch (LocalUserException e){
                    modelMap.put( "success", false );
                    modelMap.put( "errMsg", e.getMessage() );
                    return modelMap;
                }
            } else{
                modelMap.put( "success", false );
                modelMap.put( "errMsg", "请输入密码" );
            }
            return modelMap;
        }
    
        /**
         * 本地用户注册
         * @param request
         * @return
         */
        @RequestMapping(value="/localuserregister", method=RequestMethod.POST)
        @ResponseBody
        private Map<String, Object> localUserRegister(HttpServletRequest request){
            Map<String, Object> modelMap = new HashMap<>(  );
    
            //验证码校验
            if(!CodeUtil.checkVerifyCode(request)) {
                modelMap.put( "success", false );
                modelMap.put( "errMsg", "验证码错误" );
                return modelMap;
            }
            //1.接收并转化相应的参数,包括本地账户,图片信息
            ObjectMapper objectMapper = new ObjectMapper(  );
            LocalUser localUser = null;
            String localUserStr = HttpServletRequestUtil.getString( request, "localUser" );
            if(localUserStr != null){
                try {
                    localUser = objectMapper.readValue( localUserStr, LocalUser.class );
                } catch (IOException e) {
                    modelMap.put( "success", false );
                    modelMap.put( "errMsg", e.getMessage() );
                    return modelMap;
                }
            }
            CommonsMultipartFile photo = null;
            //在本次会话的上下文获取上传的文件
            CommonsMultipartResolver commonsMultipartResolver
                    = new CommonsMultipartResolver( request.getSession().getServletContext() );
            //如果文件上传的有值
            if(commonsMultipartResolver.isMultipart( request )){
                MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest) request;
                photo = (CommonsMultipartFile) multipartHttpServletRequest.getFile( "thumbnail" );
            } else{
                modelMap.put( "success", false );
                modelMap.put( "errMsg", "上传图片不能为空" );
                return modelMap;
            }
    
            //进行本地用户注册
            if(localUser != null && localUser.getUsername() != null
                    && localUser.getPassword() != null && photo != null){
                try{
                    LocalUserExecution localUserExecution = localUserService.registerLocalUser( localUser, photo );
                    if(localUserExecution.getState() == LocalUserStateEnum.SUCCESS.getState()){
                        modelMap.put( "success", true );
                    } else{
                        modelMap.put( "success", false );
                        modelMap.put( "errMsg", localUserExecution.getStateInfo() );
                    }
                } catch (Exception e){
                    modelMap.put( "success", false );
                    modelMap.put( "errMsg", e.toString() );
                    return modelMap;
                }
            } else{
                modelMap.put( "success", false );
                modelMap.put( "errMsg", "请输入注册信息" );
            }
            return modelMap;
        }
    
    
        /**
         * 对登录用户进行核对
         * @param request
         * @return
         */
        @RequestMapping(value="/logincheck", method=RequestMethod.POST)
        @ResponseBody
        private Map<String, Object> logincheck(HttpServletRequest request){
            Map<String, Object> modelMap = new HashMap<>(  );
    
            /*//验证码校验
            if(!CodeUtil.checkVerifyCode(request)){
                modelMap.put( "success", false );
                modelMap.put( "errMsg", "验证码错误" );
                return modelMap;
            }*/
            String username = HttpServletRequestUtil.getString( request, "userName" );
            String password = HttpServletRequestUtil.getString( request, "password" );
    
            //非空校验
            if(username != null && password != null){
                //从数据库获取username和password对应的用户信息,如果存在,则证明正确,否则提示用户不存在或密码错误
                LocalUser localUser = localUserService.getLocalUserByUserNameAndPwd( username, password );
                if(localUser != null){
                    modelMap.put( "success", true );
                    request.getSession().setAttribute( "user", localUser.getPersonInfo() );
                } else{
                    modelMap.put( "success", false );
                    modelMap.put( "errMsg", "用户名或密码错误" );
                }
            } else{
                modelMap.put( "success", false );
                modelMap.put( "errMsg", "用户名和密码均不能为空" );
            }
            return modelMap;
        }
    
    
        /**
         * 用户点击登出按钮时,注销掉session中的user
         * @param request
         * @return
         */
        @RequestMapping(value="/logout", method=RequestMethod.POST)
        @ResponseBody
        private Map<String, Object> logout(HttpServletRequest request){
            Map<String, Object> modelMap = new HashMap<>(  );
            //将session中的user注销掉
            request.getSession().setAttribute( "user", null );
    
            modelMap.put( "success", true );
            return modelMap;
        }
    }
    

      

      

      

  • 相关阅读:
    es数据采集脚本样例
    实时文本采集器
    闭包理解
    django orm 联表查询优化
    关于vue中使用ajax页面不更新问题
    悲观锁和乐观锁的区别
    golang基础-tailf日志组件使用
    通过request获取不同方式请求的传参
    排序算法比对,插入算法和冒泡算法
    安利一波超级好课 —— 在家也不能闲着呀!!!
  • 原文地址:https://www.cnblogs.com/SkyeAngel/p/9033716.html
Copyright © 2020-2023  润新知