spring boot 项目实现简单的登录功能

spring boot 项目实现简单的登录功能

首先我们来简单的了解一下 为了实现登录功能所需要的的模块   dao层 (数据访问层)  bean层(这里面就是实体类) service层(服务层)controller层(控制页面的跳转)

首先我们先建立项目目录  

1 bean层  (实体类)

2 dao 层 (数据访问层)

package com.example.xizi.dao;

import com.example.xizi.bean.UserBean;

public interface UserDao {
    UserBean getInfo(String username, String password);
}

3 service 层(接口)

package com.example.xizi.service;

import com.example.xizi.bean.UserBean;

public interface UserService {
    UserBean loginIn (String username, String password);
}

service 实现层,Service层业务实现类编写,注意要注解@Service,注入DAO: 

package com.example.xizi.serviceImpl;

import com.example.xizi.bean.UserBean;
import com.example.xizi.dao.UserDao;
import com.example.xizi.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

@Service
public class UserServiceImpl implements UserService {
//将dao层注入到service层
    @Resource
    private UserDao userDao;
    @Override
    public UserBean loginIn(String username, String password) {
        return userDao.getInfo(username,password);
    }
}

4控制器层

package com.example.xizi.controller;

import com.example.xizi.bean.UserBean;
import com.example.xizi.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class LoginController {
//将service层注入到web层
    @Autowired
    UserService userService;
    @RequestMapping("/login")
    public String showLogin(){
        return "login";
    }
    @RequestMapping("/loginIn")
    public String showUser(String username,String password){
        UserBean userBean = userService.loginIn(username,password);
        if(userBean!=null){
            return "success";
        }else {
            return "error";
        }
    }
}

控制器层对应着templates 下的login.html页面 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录</title>
</head>
<body>
<form action="/loginIn" method="post">
    用户名:<input type="text" id="username" name="username"></br>
    &nbsp &nbsp密码:<input type="password" id="password" name="password"></br>
    <input type="submit" id="login" value="登录">
</form>
</body>
</html>

5这就是整个登录过程的层级关系  和具体代码  在启动项目的时候要再加上一个注解 如图所示

6 运行项目 打开浏览器 输入localhpst:8080/login

7在用户名和密码栏输入数据库中已经存在的用户名和密码

8 如果页面跳转成功 则大功告成

但是这里看到了控制台上却有着一个警告 原因就是MVC中的那个请求转发的问题

这个解决方法就是在application.yml 文件下的spring 中加上以下代码就可以了,因为在spring boot load-on-startup默认值是-1,项目启动时,默认不会初始化DispatcherServlet,也就是不会调用Servlet接口的init()方法
可以通过在application.yml配置文件中设置如下配置项指定启动时初始化

mvc:
  servlet:
    load-on-startup: 1

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一些指导。 首先,您需要创建一个Spring Boot项目并添加所需的依赖项。您需要添加Spring Boot Starter Web和Spring Boot Starter Data JPA依赖项。在pom.xml文件中添加以下依赖项: ``` <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> </dependencies> ``` 这些依赖项将为您提供Spring Boot Web和Spring Boot Data JPA的支持。还添加了H2数据库支持,以便您可以在本地运行应用程序。 接下来,您需要创建一个用户实体。用户实体将用于存储用户的详细信息,例如用户名,密码等。以下是一个简单的用户实体类: ``` @Entity @Table(name = "users") public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @Column(nullable = false, unique = true) private String username; @Column(nullable = false) private String password; // Getters and setters } ``` 在这个实体中,我们使用了@Entity和@Table注释来指定实体名称和表名称。我们还为每个属性指定了@Column注释,以便JPA可以将它们映射到表的列。 接下来,您需要创建一个用户存储库。用户存储库将用于处理与用户相关的操作,例如创建用户,查找用户等。以下是一个简单的用户存储库: ``` @Repository public interface UserRepository extends JpaRepository<User, Long> { Optional<User> findByUsername(String username); } ``` 在这个存储库中,我们使用了@Repository注释来指定它是一个Spring Bean。我们还扩展了JpaRepository来获得标准的CRUD操作。我们还添加了一个findByUsername方法,以便我们可以根据用户名查找用户。 接下来,您需要创建一个用户服务。用户服务将处理与用户相关的业务逻辑,例如验证用户,创建用户等。以下是一个简单的用户服务: ``` @Service public class UserService { private final UserRepository userRepository; public UserService(UserRepository userRepository) { this.userRepository = userRepository; } public User createUser(String username, String password) throws UserAlreadyExistsException { Optional<User> existingUser = userRepository.findByUsername(username); if (existingUser.isPresent()) { throw new UserAlreadyExistsException(); } User user = new User(); user.setUsername(username); user.setPassword(passwordEncoder().encode(password)); return userRepository.save(user); } public User authenticateUser(String username, String password) throws UserNotFoundException, InvalidPasswordException { Optional<User> optionalUser = userRepository.findByUsername(username); User user = optionalUser.orElseThrow(UserNotFoundException::new); if (!passwordEncoder().matches(password, user.getPassword())) { throw new InvalidPasswordException(); } return user; } private PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } } ``` 在这个服务中,我们使用了@Service注释来指定它是一个Spring Bean。我们还注入了一个UserRepository,以便我们可以使用它来处理与用户相关的操作。 我们添加了两个方法:createUser和authenticateUser。createUser方法将创建一个新用户,并将其保存到数据库中。authenticateUser方法将验证用户的凭据,并返回用户对象。 在上面的代码中,您可能已经注意到我们使用了一个PasswordEncoder来处理密码。这是一个用于密码加密和解密的Spring Security组件。在这个示例中,我们使用了BCryptPasswordEncoder。 最后,您需要创建一个控制器来处理HTTP请求。以下是一个简单的控制器: ``` @RestController @RequestMapping("/users") public class UserController { private final UserService userService; public UserController(UserService userService) { this.userService = userService; } @PostMapping("/register") public User registerUser(@RequestBody UserDTO userDTO) throws UserAlreadyExistsException { return userService.createUser(userDTO.getUsername(), userDTO.getPassword()); } @PostMapping("/login") public User loginUser(@RequestBody UserDTO userDTO) throws UserNotFoundException, InvalidPasswordException { return userService.authenticateUser(userDTO.getUsername(), userDTO.getPassword()); } @ExceptionHandler({UserAlreadyExistsException.class, UserNotFoundException.class, InvalidPasswordException.class}) public ResponseEntity<String> handleException(Exception e) { return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(e.getMessage()); } } ``` 在这个控制器中,我们使用了@RestController和@RequestMapping注释来指定它是一个Spring MVC控制器。我们还注入了UserService,以便我们可以使用它来处理与用户相关的业务逻辑。 我们添加了两个端点:registerUser和loginUser。registerUser将创建一个新用户,并返回用户对象。loginUser将验证用户的凭据,并返回用户对象。 我们还添加了一个ExceptionHandler方法,以便我们可以捕获和处理异常。在这个示例中,我们返回了一个HTTP 401 Unauthorized响应。 这就是您需要实现的所有内容。您可以使用POSTMAN或其他HTTP客户端来测试这些端点。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值