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

本文主要是介绍Spring Security使用总结四,此篇没有任何营养,就是将注册服务补全,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

import lombok.Data;
@Data
public class RegisterDTO {private String name;private String password;private String confirmPassword;
}

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

<!--fastjson依赖-->
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version> 2.0.32</version>
</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<User,Long> {}

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 {@ResourceUserRepository 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 {@ResourceRegisterService 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片段

<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服务设为所有人都可以访问的服务,于是就需要在配置类里面修改代码为如下所示:

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter  {//...省略的代码@Overrideprotected 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

这篇关于Spring Security使用总结四,此篇没有任何营养,就是将注册服务补全的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/362897

相关文章

Java遍历HashMap的6种常见方式

《Java遍历HashMap的6种常见方式》这篇文章主要给大家介绍了关于Java遍历HashMap的6种常见方式,方法包括使用keySet()、entrySet()、forEach()、迭代器以及分别... 目录1,使用 keySet() 遍历键,再通过键获取值2,使用 entrySet() 遍历键值对3,

Linux区分SSD和机械硬盘的方法总结

《Linux区分SSD和机械硬盘的方法总结》在Linux系统管理中,了解存储设备的类型和特性是至关重要的,不同的存储介质(如固态硬盘SSD和机械硬盘HDD)在性能、可靠性和适用场景上有着显著差异,本文... 目录一、lsblk 命令简介基本用法二、识别磁盘类型的关键参数:ROTA查询 ROTA 参数ROTA

Java版本不兼容问题详细解决方案步骤

《Java版本不兼容问题详细解决方案步骤》:本文主要介绍Java版本不兼容问题解决的相关资料,详细分析了问题原因,并提供了解决方案,包括统一JDK版本、修改项目配置和清理旧版本残留等步骤,需要的朋... 目录错误原因分析解决方案步骤第一步:统一 JDK 版本第二步:修改项目配置第三步:清理旧版本残留兼容性对

使用FileChannel实现文件的复制和移动方式

《使用FileChannel实现文件的复制和移动方式》:本文主要介绍使用FileChannel实现文件的复制和移动方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录使用 FileChannel 实现文件复制代码解释使用 FileChannel 实现文件移动代码解释

Spring实现Bean的初始化和销毁的方式

《Spring实现Bean的初始化和销毁的方式》:本文主要介绍Spring实现Bean的初始化和销毁的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Bean的初始化二、Bean的销毁总结在前面的章节当中介绍完毕了ApplicationContext,也就

Java的"伪泛型"变"真泛型"后对性能的影响

《Java的伪泛型变真泛型后对性能的影响》泛型擦除本质上就是擦除与泛型相关的一切信息,例如参数化类型、类型变量等,Javac还将在需要时进行类型检查及强制类型转换,甚至在必要时会合成桥方法,这篇文章主... 目录1、真假泛型2、性能影响泛型存在于Java源代码中,在编译为字节码文件之前都会进行泛型擦除(ty

Java中的getBytes()方法使用详解

《Java中的getBytes()方法使用详解》:本文主要介绍Java中getBytes()方法使用的相关资料,getBytes()方法有多个重载形式,可以根据需要指定字符集来进行转换,文中通过代... 目录前言一、常见重载形式二、示例代码三、getBytes(Charset charset)和getByt

Java使用Stream流的Lambda语法进行List转Map的操作方式

《Java使用Stream流的Lambda语法进行List转Map的操作方式》:本文主要介绍Java使用Stream流的Lambda语法进行List转Map的操作方式,具有很好的参考价值,希望对大... 目录背景Stream流的Lambda语法应用实例1、定义要操作的UserDto2、ListChina编程转成M

Spring框架中@Lazy延迟加载原理和使用详解

《Spring框架中@Lazy延迟加载原理和使用详解》:本文主要介绍Spring框架中@Lazy延迟加载原理和使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、@Lazy延迟加载原理1.延迟加载原理1.1 @Lazy三种配置方法1.2 @Component

使用easy connect之后,maven无法使用,原来需要配置-Djava.net.preferIPv4Stack=true问题

《使用easyconnect之后,maven无法使用,原来需要配置-Djava.net.preferIPv4Stack=true问题》:本文主要介绍使用easyconnect之后,maven无法... 目录使用easGWowCy connect之后,maven无法使用,原来需要配置-DJava.net.pr