Spring Security使用总结四,此篇没有任何营养,就是将注册服务补全

这可以说是准备工作的最后一道程序,就是将用户注册到系统中去,这一章内容很简单,就是使用springboot的jpa将前台传到后台的用户注册到数据库中,所以这一章的代码多,但是都是套路,前面的也是套路,但是没有这次的套路深。

首先创建一个类,用来接收前台传进来的信息

java 复制代码
import lombok.Data;
@Data
public class RegisterDTO {
    private String name;
    private String password;
    private String confirmPassword;
}

然后需要依赖fastjson作为服务的返回值

XML 复制代码
<!--fastjson依赖-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version> 2.0.32</version>
</dependency>

再创建存入数据库的表

java 复制代码
import lombok.Data;
import lombok.experimental.Accessors;
import javax.persistence.*;
import java.io.Serializable;
@Entity
@Table(name="user_info")
@Accessors(chain = true)
@Data
public class User implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 用户Id
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    /**
     * 用户名
     */
    @Column(nullable = false,unique = true)
    private String name;
    /**
     * 密码
     */
    @Column(nullable = false,unique = true)
    private String password;
}

添加仓储类和服务类以及对外的接口

java 复制代码
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import org.zcrazy.security.entity.User;

@Repository
public interface UserRepository extends JpaRepository<User,Long> {}
java 复制代码
import com.alibaba.fastjson.JSONObject;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import org.zcrazy.security.entity.User;
import org.zcrazy.security.repository.UserRepository;
@Service
public class RegisterService {
    @Resource
    UserRepository userRepository;
    public JSONObject register(String name, String password){
        User user = new User();
        user.setName(name).setPassword(password);
        userRepository.save(user);
        return JSONObject.parseObject("{'userId':"+ userRepository.save(user).getId() +"}");
    }
}
java 复制代码
import com.alibaba.fastjson.JSONObject;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.zcrazy.security.dto.RegisterDTO;
import org.zcrazy.security.service.RegisterService;
@Controller
public class RegisterController {
    @Resource
    RegisterService registerService;
    @RequestMapping("/register")
    public String register(){
        return "register";
    }
    @ResponseBody
    @PostMapping("/registration")
    public JSONObject registration(@RequestBody RegisterDTO register){
        if(!register.getPassword().equals(register.getConfirmPassword())){
            return JSONObject.parseObject("两次密码不一致");
        }
        return registerService.register(register.getName(),register.getPassword());
    }
}

前台也必须要有向后台传数据的代码,修改前台如下所示:

在注册按钮上加入点击事件

html 复制代码
<button id="register" type="submit" onclick="click()" class="btn btn-success">注册</button>

添加如下的js片段

javascript 复制代码
<script type="text/javascript">
    $(function() {
        $("#register").click(function(){
            $.ajax({
                type: "POST",
                dataType: "json",
                url: 'http://localhost:8080/registration',
                contentType: "application/json",
                data:JSON.stringify({
                    "name": $("#name").val(),
                    "password": $("#password").val(),
                    "confirmPassword":$("#confirmPassword").val()
                }),
                success: function (result) {
                    console.log("data is :" + result)
                }
            });
        })
    });
</script>

这个时候启动项目,访问http://localhost:8080/register ,填入信息,我填的是用户名:test11,密码:123456,然后点击注册,页面来说什么反应都没有,访问http://localhost:8080/h2-console,查看数据库发现也没有数据,什么情况呢?原来security的配置里面没有将/registration服务设为所有人都可以访问的服务,于是就需要在配置类里面修改代码为如下所示:

java 复制代码
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter  {
   //...省略的代码
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                //关闭csrf
                .csrf().disable()
                .authorizeRequests()
                .antMatchers(new String[]{"/register", "/registration"}).permitAll()
                .antMatchers(matchers).anonymous()
                // 除上面外的所有请求全部需要鉴权认证
                .anyRequest().authenticated()
                .and()
                //允许加载静态资源
                .headers().frameOptions().sameOrigin();
    }
    //...省略的代码
}

重启项目,访问http://localhost:8080/register ,填入信息,点击注册,访问http://localhost:8080/h2-console,进入数据库,输入查询语句,可以看到已经注册成功了。

此时项目的文件结构如下所示

和上一章对比来看,多了很多的内容,但说白了就是多了保存数据的内容,一个service,一个Repository,一个entity,一个DTO

相关推荐
考虑考虑8 小时前
Jpa使用union all
java·spring boot·后端
用户3721574261359 小时前
Java 实现 Excel 与 TXT 文本高效互转
java
浮游本尊10 小时前
Java学习第22天 - 云原生与容器化
java
渣哥11 小时前
原来 Java 里线程安全集合有这么多种
java
间彧12 小时前
Spring Boot集成Spring Security完整指南
java
间彧12 小时前
Spring Secutiy基本原理及工作流程
java
Java水解13 小时前
JAVA经典面试题附答案(持续更新版)
java·后端·面试
洛小豆15 小时前
在Java中,Integer.parseInt和Integer.valueOf有什么区别
java·后端·面试
前端小张同学16 小时前
服务器上如何搭建jenkins 服务CI/CD😎😎
java·后端
ytadpole16 小时前
Spring Cloud Gateway:一次不规范 URL 引发的路由转发404问题排查
java·后端