Spring+MongoDB实现登录注册功能

下面就为你讲解如何使用Spring和MongoDB实现登录注册功能。

准备工作

  • 安装并启动MongoDB服务器
  • 创建Maven项目,引入所需依赖

xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>

实现注册功能

  1. 编写User类用来保存用户信息,包含用户名和密码字段
    ```java
    @Data
    @Document(collection = "user")
    public class User implements UserDetails {
    @Id
    private String id;
    private String username;
    private String password;
    private boolean accountNonExpired = true;
    private boolean accountNonLocked = true;
    private boolean credentialsNonExpired = true;
    private boolean enabled = true;

    //省略方法
    

    }
    2 .编写UserController实现注册java
    @RestController
    @RequestMapping("/user")
    public class UserController {

    private final BCryptPasswordEncoder passwordEncoder;
    
    private final UserService userService;
    
    public UserController(UserService userService, BCryptPasswordEncoder passwordEncoder) {
        this.userService = userService;
        this.passwordEncoder = passwordEncoder;
    }
    
    @PostMapping("/register")
    public ResponseEntity<User> register(@RequestBody User user) {
        String encodedPassword = passwordEncoder.encode(user.getPassword());
        user.setPassword(encodedPassword);
        User newUser = userService.saveUser(user);
        return ResponseEntity.ok(newUser);
    }
    

    }
    3. 编写UserService,其中saveUser用于将用户信息保存到MongoDB中java
    @Service
    public class UserServiceImpl implements UserService, UserDetailsService {

    private final UserRepository userRepository;
    
    public UserServiceImpl(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
    
    @Override
    public User saveUser(User user) {
        return userRepository.save(user);
    }
    
    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        User user = userRepository.findByUsername(username);
        if (user == null) {
            throw new UsernameNotFoundException("用户不存在");
        }
        return user;
    }
    

    }
    4. 编写UserRepository,使用Spring Data MongoDB来进行数据库操作java
    public interface UserRepository extends MongoRepository {
    User findByUsername(String username);
    }
    ```

实现登录功能

  1. 在Spring Security配置类中配置使用UserDetailsService进行身份认证
    ```java
    @Configuration
    @EnableWebSecurity
    @AllArgsConstructor
    public class SecurityConfig extends WebSecurityConfigurerAdapter {

    private final UserService userService;
    
    @Bean
    public BCryptPasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
    
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userService).passwordEncoder(passwordEncoder());
    }
    
    //省略其他配置
    

    }
    2. 编写登录接口java
    @RestController
    @RequestMapping("/user")
    public class UserController {

    //省略其他代码
    
    @PostMapping("/login")
    public ResponseEntity<String> login(HttpServletRequest request,
                                        @RequestParam String username,
                                        @RequestParam String password) {
        try {
            request.login(username, password);
        } catch (ServletException e) {
            return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build();
        }
        return ResponseEntity.ok("登录成功");
    }
    

    }
    ```
    3. 编写登录页面和注册页面,使用表单提交用户名和密码的方式来进行登录和注册

综上所述,使用以上方式就可以在Spring和MongoDB中实现简单的登录注册功能。

示例:

  1. 在MongoDB中创建名为test的数据库,运行以下示例代码,创建用户名密码分别为test123456的用户

```java
@RestController
@RequestMapping("/user")
public class UserController {

   private final UserService userService;

   public UserController(UserService userService) {
       this.userService = userService;
   }

   @GetMapping("/save")
   public ResponseEntity<User> save() {
       User user = new User();
       user.setUsername("test");
       user.setPassword("123456");
       User newUser = userService.saveUser(user);
       return ResponseEntity.ok(newUser);
   }

}
```

  1. 使用Postman发送POST请求到http://localhost:8080/user/register,请求Body为以下JSON数据:

json
{
"username": "test",
"password": "123456"
}

若收到{"id":"xxx", "username":"test", "password":"$2a$10$xxx","accountNonExpired":true,"accountNonLocked":true,"credentialsNonExpired":true,"enabled":true}则表示注册成功。

  1. 配置Spring Security,使/user/login接口需要身份认证

```java
@Configuration
@EnableWebSecurity
@AllArgsConstructor
public class SecurityConfig extends WebSecurityConfigurerAdapter {

   private final UserService userService;

   //省略其他代码

   @Override
   protected void configure(HttpSecurity http) throws Exception {
       http.authorizeRequests()
               .antMatchers("/user/register").permitAll()
               .anyRequest().authenticated()
               .and()
               .formLogin()
               .permitAll();
   }

}
```

  1. 使用Postman发送POST请求到http://localhost:8080/user/login?username=test&password=123456,若收到登录成功则表示登录成功。

以上就是使用Spring和MongoDB实现登录注册功能的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring+MongoDB实现登录注册功能 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • Java中单例模式的七种写法示例

    Java中单例模式的七种写法示例 什么是单例模式? 单例模式是一种创建型设计模式,它保证某个类在应用程序中只有一个对象实例存在。 在应用程序中,有些实例对象需要全局唯一,比如数据库连接实例、日志记录实例等,此时就可以使用单例模式来确保只创建一个对象实例,以达到节约系统资源的目的。 单例模式的七种实现方式 1. 饿汉式单例模式 public class Sin…

    Java 2023年5月26日
    00
  • Mybatis源码解析之事务管理

    Mybatis源码解析之事务管理 什么是事务 事务是指一系列操作,这些操作必须同时成功或者同时失败。比如,银行转账操作就是一个事务,它包括从一个账户扣除金额并把金额加到另一个账户中。这个过程中如果其中一个操作失败,那么这个事务就必须回滚,保证不会出现数据不一致或者数据丢失的情况。 Mybatis中的事务管理 Mybatis提供了基于JDBC的事务管理,其中有…

    Java 2023年5月19日
    00
  • 关于JDK+Tomcat+eclipse+MyEclipse的配置方法,看这篇够了

    关于JDK+Tomcat+eclipse+MyEclipse的配置方法 本文将为您介绍如何将 JDK、Tomcat、eclipse 和 MyEclipse 配置到同一个环境中。配置完成后,您可以使用这些工具来开发 Java web 项目。 配置 JDK 下载并安装 JDK。 配置环境变量。将 JDK 的 bin 目录添加到系统环境变量的 PATH 中。 示例…

    Java 2023年6月2日
    00
  • Java使用wait/notify实现线程间通信上篇

    下面是详细讲解“Java使用wait/notify实现线程间通信上篇”的完整攻略。 标题 Java使用wait/notify实现线程间通信上篇 简介 线程间通信是多线程中非常重要的一个方面,它能够保证多个线程间能够相互协作,共同完成任务。Java中的wait/notify机制是线程间通信的一种重要实现方式。本文将介绍Java中的wait/notify机制的相…

    Java 2023年5月19日
    00
  • Spring Security和Shiro的相同点与不同点整理

    下面我将详细讲解“Spring Security和Shiro的相同点与不同点整理”,这里进行如下分类阐述:概念、使用场景、安全策略、授权与认证、拦截器等。 一、概念 Spring Security:基于spring的安全框架,目的是为了给Java应用程序提供声明式的安全访问控制。 Shiro:一个易于使用的Java安全框架,提供了身份验证、授权、密码和会话管…

    Java 2023年5月20日
    00
  • 详解Java消息队列-Spring整合ActiveMq

    详解Java消息队列-Spring整合ActiveMq 简介 Java消息队列是一种常见的异步通信方式,可用于解耦系统各个模块间的耦合,提升系统性能和可靠性。本文将介绍如何使用Spring框架整合ActiveMq消息队列,并给出两个示例演示如何使用。 准备工作 JDK 1.8+ Maven 3.0+ ActiveMq 5.15.9 Spring 5.0.7 …

    Java 2023年5月19日
    00
  • 如何让Jackson JSON生成的数据包含的中文以unicode方式编码

    要让 Jackson JSON 生成的数据包含的中文以 unicode 方式编码,我们可以借助 Jackson 提供的 ObjectMapper 对象以及 JsonGenerator 对象,具体步骤如下: 创建 ObjectMapper 对象,并配置生成 JSON 格式的选项: ObjectMapper mapper = new ObjectMapper()…

    Java 2023年5月20日
    00
  • Spring 整合Shiro 并扩展使用EL表达式的实例详解

    一、前言 在Web应用中,身份认证和权限控制是非常重要的组成部分,Shiro作为一个灵活的、功能强大的Java安全框架,在开发过程中可以方便地实现各种安全需求,因此被广泛应用于各种Java项目中。而Spring则作为一个非常流行的开发框架,与Shiro的整合可以解决现代Web应用中的常见安全问题。 本文将详细讲解如何在Spring项目中集成Shiro,并使用…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部