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


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

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

    1. import lombok.Data;
    2. @Data
    3. public class RegisterDTO {
    4. private String name;
    5. private String password;
    6. private String confirmPassword;
    7. }

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

    1. <dependency>
    2. <groupId>com.alibabagroupId>
    3. <artifactId>fastjsonartifactId>
    4. <version> 2.0.32version>
    5. dependency>

    再创建存入数据库的表

    1. import lombok.Data;
    2. import lombok.experimental.Accessors;
    3. import javax.persistence.*;
    4. import java.io.Serializable;
    5. @Entity
    6. @Table(name="user_info")
    7. @Accessors(chain = true)
    8. @Data
    9. public class User implements Serializable {
    10. private static final long serialVersionUID = 1L;
    11. /**
    12. * 用户Id
    13. */
    14. @Id
    15. @GeneratedValue(strategy = GenerationType.IDENTITY)
    16. private Long id;
    17. /**
    18. * 用户名
    19. */
    20. @Column(nullable = false,unique = true)
    21. private String name;
    22. /**
    23. * 密码
    24. */
    25. @Column(nullable = false,unique = true)
    26. private String password;
    27. }

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

    1. import org.springframework.data.jpa.repository.JpaRepository;
    2. import org.springframework.stereotype.Repository;
    3. import org.zcrazy.security.entity.User;
    4. @Repository
    5. public interface UserRepository extends JpaRepository {}

    1. import com.alibaba.fastjson.JSONObject;
    2. import javax.annotation.Resource;
    3. import org.springframework.stereotype.Service;
    4. import org.zcrazy.security.entity.User;
    5. import org.zcrazy.security.repository.UserRepository;
    6. @Service
    7. public class RegisterService {
    8. @Resource
    9. UserRepository userRepository;
    10. public JSONObject register(String name, String password){
    11. User user = new User();
    12. user.setName(name).setPassword(password);
    13. userRepository.save(user);
    14. return JSONObject.parseObject("{'userId':"+ userRepository.save(user).getId() +"}");
    15. }
    16. }

    1. import com.alibaba.fastjson.JSONObject;
    2. import javax.annotation.Resource;
    3. import org.springframework.stereotype.Controller;
    4. import org.springframework.web.bind.annotation.PostMapping;
    5. import org.springframework.web.bind.annotation.RequestBody;
    6. import org.springframework.web.bind.annotation.RequestMapping;
    7. import org.springframework.web.bind.annotation.ResponseBody;
    8. import org.zcrazy.security.dto.RegisterDTO;
    9. import org.zcrazy.security.service.RegisterService;
    10. @Controller
    11. public class RegisterController {
    12. @Resource
    13. RegisterService registerService;
    14. @RequestMapping("/register")
    15. public String register(){
    16. return "register";
    17. }
    18. @ResponseBody
    19. @PostMapping("/registration")
    20. public JSONObject registration(@RequestBody RegisterDTO register){
    21. if(!register.getPassword().equals(register.getConfirmPassword())){
    22. return JSONObject.parseObject("两次密码不一致");
    23. }
    24. return registerService.register(register.getName(),register.getPassword());
    25. }
    26. }

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

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

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

    1. @Configuration
    2. public class SecurityConfig extends WebSecurityConfigurerAdapter {
    3. //...省略的代码
    4. @Override
    5. protected void configure(HttpSecurity http) throws Exception {
    6. http
    7. //关闭csrf
    8. .csrf().disable()
    9. .authorizeRequests()
    10. .antMatchers(new String[]{"/register", "/registration"}).permitAll()
    11. .antMatchers(matchers).anonymous()
    12. // 除上面外的所有请求全部需要鉴权认证
    13. .anyRequest().authenticated()
    14. .and()
    15. //允许加载静态资源
    16. .headers().frameOptions().sameOrigin();
    17. }
    18. //...省略的代码
    19. }

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

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

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

  • 相关阅读:
    i++ 和 ++i原理
    ConcurrentDictionary<T,V> 的这两个操作不是原子性的
    知识体系之Redis
    DBCO-PEG-OPSS/OPSS-PEG-DBCO/二苯并环辛炔聚乙二醇修饰邻吡啶二硫
    【已解决】ChatGPT报错“Unable to load history Retry“等问题
    松江辟出长三角G60科创走廊供给侧结构性改革新路
    Zookeeper安装
    HTML网页制作代码——简约的旅游图文相册博客HTML模板(12页)HTML+CSS+JavaScript 静态HTML旅行主题网页作业
    【EI会议征稿】第三届机械、建模与材料工程国际学术会议(I3ME 2023)
    你是否正确地编写了 Git 提交信息?
  • 原文地址:https://blog.csdn.net/z449077880/article/details/134238957