Loading

SpringBoot集成Spring Security(二)注册 、密码加密、修改密码

SpringBoot集成Spring Security(一)登录注销
写在前面
上一节创建了项目并且利用Spring Security完成了登录注销功能,这里继续说一下注册、密码加密和找回密码,代码注释较清晰。
一、web层
在这里插入图片描述控制
StudentController.java

package com.jxnu.os.controller;

import com.jxnu.os.model.RespBean;
import com.jxnu.os.model.Student;
import com.jxnu.os.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;


/**
 * @author xiao
 */
@RestController
@RequestMapping("/student")
public class StudentController {
    @Autowired
    StudentService studentService;

    /**
     * 注册
     * @param student
     * @return
     */
    @PostMapping("/register")
    public RespBean register(Student student) {
        if(studentService.register(student)){
            return RespBean.ok("注册成功",student);
        }else{
            return RespBean.error("注册失败,用户名已存在");
        }
    }
    
    /**
     * 修改密码
     * @param sno
     * @param password
     * @param rePassword
     * @return
     */
    @PutMapping("/modifyPass")
    public RespBean modifyPass(String sno,String password,String rePassword) {
        if(studentService.modifyPass(sno,password,rePassword)){
            return RespBean.ok("修改成功");
        }else{
            return RespBean.error("修改失败,原密码错误");
        }
    }

}

二、service层
注册时对密码进行加密,修改密码时则需先解密后验证
StudentService.java

package com.jxnu.os.service;

import com.jxnu.os.mapper.StudentMapper;
import com.jxnu.os.model.Student;
import com.jxnu.os.utils.StudentUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author xiao
 */
@Service
public class StudentService implements UserDetailsService {

    @Autowired
    StudentMapper studentMapper;

    /**
     * 注册
     * @param student
     * @return
     */
    public boolean register(Student student) {
        Student existUser = studentMapper.loadUserBySno(student.getUsername());
        if (existUser != null) {
            //如果用户名已存在
            return false;

        } else {
            BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
            String encode = encoder.encode(student.getPassword());
            student.setPassword(encode);
            studentMapper.insert(student);
            return true;
        }
    }

    /**
     * 修改密码
     * @param sno
     * @param password
     * @param rePassword
     * @return
     */
    public boolean modifyPass(String sno,String password,String rePassword) {
        Student student = studentMapper.loadUserBySno(sno);
        BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
        if(encoder.matches(password,student.getPassword())) {
            String encode = encoder.encode(rePassword);
            rePassword = encode;
            studentMapper.modifyPass(sno,rePassword);
            return true;
        }else {
            return false;
        }
    }

}

三、mapper层
StudentMapper.java

package com.jxnu.os.mapper;

import com.jxnu.os.model.Student;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author xiao
 */
public interface StudentMapper {

    int insert(Student student);

    int modifyPass(String sno,String rePassword);
}

StudentMapper.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.jxnu.os.mapper.StudentMapper">
    <resultMap id="BaseResultMap" type="com.jxnu.os.model.Student">
        <id column="id" property="id" jdbcType="INTEGER"/>
        <result column="username" property="username" jdbcType="VARCHAR"/>
        <result column="sno" property="sno" jdbcType="VARCHAR"/>
        <result column="s_sex" property="s_sex" jdbcType="CHAR"/>
        <result column="t_id" property="t_id" jdbcType="INTEGER"/>
        <result column="password" property="password" jdbcType="VARCHAR"/>
    </resultMap>

    <update id="modifyPass" parameterType="com.jxnu.os.model.Student">
        update student set password = #{rePassword} where sno=#{sno}
    </update>

    <insert id="insert" parameterType="com.jxnu.os.model.Student">
        insert into student (username,password)
        values (#{username,jdbcType=VARCHAR},
        #{password,jdbcType=VARCHAR})
    </insert>

</mapper>

posted @ 2020-02-06 15:10  XiaoJ_c  阅读(176)  评论(0编辑  收藏  举报