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

首先创建一个类,用来接收前台传进来的信息
- import lombok.Data;
- @Data
- public class RegisterDTO {
- private String name;
- private String password;
- private String confirmPassword;
- }
然后需要依赖fastjson作为服务的返回值
- <dependency>
- <groupId>com.alibabagroupId>
- <artifactId>fastjsonartifactId>
- <version> 2.0.32version>
- dependency>
再创建存入数据库的表
- 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;
- }
添加仓储类和服务类以及对外的接口
- import org.springframework.data.jpa.repository.JpaRepository;
- import org.springframework.stereotype.Repository;
- import org.zcrazy.security.entity.User;
-
- @Repository
- public interface UserRepository extends JpaRepository
{}
- 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() +"}");
- }
- }
- 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());
- }
- }
前台也必须要有向后台传数据的代码,修改前台如下所示:
在注册按钮上加入点击事件
<button id="register" type="submit" onclick="click()" class="btn btn-success">注册button>
添加如下的js片段
这个时候启动项目,访问http://localhost:8080/register ,填入信息,我填的是用户名:test11,密码:123456,然后点击注册,页面来说什么反应都没有,访问http://localhost:8080/h2-console,查看数据库发现也没有数据,什么情况呢?原来security的配置里面没有将/registration服务设为所有人都可以访问的服务,于是就需要在配置类里面修改代码为如下所示:
- @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