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>

  • 4
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Spring Boot中集成Spring Security后,可以通过以下步骤使用Spring Security进行鉴权: 1. 添加依赖:在pom.xml文件中添加Spring Security的依赖。 ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> ``` 2. 创建配置类:创建一个继承自`WebSecurityConfigurerAdapter`的配置类,并重写`configure`方法。 ```java @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/public/**").permitAll() .anyRequest().authenticated() .and() .formLogin() .and() .logout().permitAll(); } } ``` 上述配置中的`http.authorizeRequests()`用于配置URL的访问权限,`.antMatchers("/public/**").permitAll()`表示`/public/`路径下的所有资源允许无需身份认证即可访问,`.anyRequest().authenticated()`表示其他路径需要进行身份认证后才能访问。`.formLogin()`用于启用默认的登录表单,`.logout().permitAll()`用于启用默认的退出登录功能。 3. 配置用户信息:可以在配置类中通过重写`configure`方法,设置一个内存中的用户存储,或者自定义用户认证逻辑。 ```java @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication() .withUser("user") .password("{noop}password") .roles("USER"); } // 其他配置... } ``` 上述配置中的`auth.inMemoryAuthentication()`用于创建一个基于内存的用户存储,`.withUser("user").password("{noop}password").roles("USER")`表示创建一个用户名为"user",密码为"password",角色为"USER"的用户。`{noop}`表示使用明文密码进行匹配,这里仅作示例,实际生产环境中应使用加密后的密码。 以上是使用Spring Security进行鉴权的基本步骤,具体的配置还可以根据实际需求进行调整和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值