📜  java web 应用登录系统 (1)

📅  最后修改于: 2023-12-03 15:31:32.699000             🧑  作者: Mango

Java Web 应用登录系统

Java Web 应用登录系统是一个常见的系统,用于验证用户身份并提供对应的权限。该系统通常会包含登录页面、注册页面、注销页面以及用户信息管理页面。在本文中,我们将介绍如何使用 Java 技术实现一个 Java Web 应用登录系统。

技术栈

在实现 Java Web 应用登录系统时,我们需要以下技术栈:

  • Java
  • Spring Boot
  • Spring Security
  • Thymeleaf
  • MySQL
实现步骤
1. 创建项目

首先,我们需要创建一个 Spring Boot 项目。你可以使用你习惯的 IDE 或者使用 Spring Initializr 来创建。

2. 添加依赖

我们需要添加以下依赖:

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
  </dependency>
  
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
  </dependency>
  
  <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
  </dependency>
</dependencies>
3. 配置数据源

我们需要在 application.properties 中添加数据源的相关配置:

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=
4. 创建用户表

我们需要创建一个用户表,用于存储用户的信息。可以使用以下 SQL 语句创建用户表:

CREATE TABLE users(
  id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  username VARCHAR(50) NOT NULL,
  password VARCHAR(100) NOT NULL
);
5. 添加用户注册页面

我们需要添加用户注册页面,用于用户注册。可以使用 Thymeleaf 来渲染页面:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
  <title>用户注册</title>
</head>
<body>
  <h1>用户注册</h1>
  
  <form method="post" th:action="@{/register}">
    <div>
      <label for="username">用户名:</label>
      <input type="text" name="username" id="username" required />
    </div>
    
    <div>
      <label for="password">密码:</label>
      <input type="password" name="password" id="password" required />
    </div>
    
    <div>
      <button type="submit">注册</button>
    </div>
  </form>
</body>
</html>
6. 添加登录页面

我们需要添加登录页面,用于用户登录。可以使用 Thymeleaf 来渲染页面:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
  <title>用户登录</title>
</head>
<body>
  <h1>用户登录</h1>
  
  <form method="post" th:action="@{/login}">
    <div>
      <label for="username">用户名:</label>
      <input type="text" name="username" id="username" required />
    </div>
    
    <div>
      <label for="password">密码:</label>
      <input type="password" name="password" id="password" required />
    </div>
    
    <div>
      <button type="submit">登录</button>
    </div>
  </form>
</body>
</html>
7. 添加注销页面

我们需要添加注销页面,用于用户注销。可以使用 Thymeleaf 来渲染页面:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
  <title>用户注销</title>
</head>
<body>
  <h1>用户注销</h1>
  
  <form method="post" th:action="@{/logout}">
    <div>
      <button type="submit">注销</button>
    </div>
  </form>
</body>
</html>
8. 添加用户信息管理页面

我们需要添加用户信息管理页面,用于管理用户信息。可以使用 Thymeleaf 来渲染页面:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
  <title>用户信息管理</title>
</head>
<body>
  <h1>用户信息管理</h1>
  
  <table>
    <thead>
      <tr>
        <th>ID</th>
        <th>用户名</th>
        <th>密码</th>
      </tr>
    </thead>
    <tbody>
      <tr th:each="user : ${users}">
        <td th:text="${user.id}"></td>
        <td th:text="${user.username}"></td>
        <td th:text="${user.password}"></td>
      </tr>
    </tbody>
  </table>
  
  <form method="post" th:action="@{/add-user}">
    <div>
      <label for="username">用户名:</label>
      <input type="text" name="username" id="username" required />
    </div>
    
    <div>
      <label for="password">密码:</label>
      <input type="password" name="password" id="password" required />
    </div>
    
    <div>
      <button type="submit">添加用户</button>
    </div>
  </form>
</body>
</html>
9. 添加控制器

我们需要添加控制器,用于处理登录、注销、注册和用户信息管理请求:

@Controller
public class UserController {

  @Autowired
  private UserRepository userRepository;
  
  @GetMapping("/login")
  public String login(Model model) {
    return "login";
  }
  
  @GetMapping("/logout")
  public String logout(Model model) {
    return "logout";
  }
  
  @GetMapping("/register")
  public String register(Model model) {
    return "register";
  }
  
  @PostMapping("/register")
  public String register(Model model, User user) {
    userRepository.save(user);
    return "redirect:/login";
  }
  
  @GetMapping("/users")
  public String users(Model model) {
    Iterable<User> users = userRepository.findAll();
    model.addAttribute("users", users);
    return "users";
  }
  
  @PostMapping("/add-user")
  public String addUser(Model model, User user) {
    userRepository.save(user);
    return "redirect:/users";
  }
  
  @GetMapping("/")
  public String home(Model model) {
    return "redirect:/users";
  }
}
10. 配置 Spring Security

我们需要配置 Spring Security,用于验证用户身份并提供对应的权限。可以使用以下配置:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

  @Autowired
  private UserService userService;
  
  @Bean
  public BCryptPasswordEncoder passwordEncoder(){
    return new BCryptPasswordEncoder();
  }
  
  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http
      .authorizeRequests()
        .antMatchers("/login", "/register").permitAll()
        .antMatchers("/users").hasRole("ADMIN")
        .anyRequest().authenticated()
        .and()
      .formLogin()
        .loginPage("/login")
        .defaultSuccessUrl("/users")
        .and()
      .logout()
        .logoutUrl("/logout")
        .logoutSuccessUrl("/login")
        .and()
      .csrf().disable();
  }
  
  @Autowired
  public void configureGlobal(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception {
    authenticationManagerBuilder
      .userDetailsService(userDetailsService())
      .passwordEncoder(passwordEncoder());
  }
  
  @Override
  protected UserDetailsService userDetailsService() {
    return userService;
  }
}
11. 创建用户模型和服务

我们需要创建用户模型和服务,用于管理用户信息。可以使用以下代码:

@Entity
public class User implements UserDetails {

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private Long id;
  
  @Column(nullable = false)
  private String username;
  
  @Column(nullable = false)
  private String password;
  
  @Override
  public Collection<? extends GrantedAuthority> getAuthorities() {
    return Collections.emptyList();
  }

  @Override
  public String getPassword() {
    return password;
  }

  @Override
  public String getUsername() {
    return username;
  }

  @Override
  public boolean isAccountNonExpired() {
    return true;
  }

  @Override
  public boolean isAccountNonLocked() {
    return true;
  }

  @Override
  public boolean isCredentialsNonExpired() {
    return true;
  }

  @Override
  public boolean isEnabled() {
    return true;
  }
}

@Repository
public interface UserRepository extends CrudRepository<User, Long> {

  User findByUsername(String username);
}
@Service
public class UserService implements UserDetailsService {
  
  @Autowired
  private UserRepository userRepository;
  
  @Override
  public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
    User user = userRepository.findByUsername(username);
    if(user == null){
      throw new UsernameNotFoundException(username);
    }
    return user;
  }
}
12. 运行应用程序

现在,你可以启动你的应用程序,并访问 http://localhost:8080 来访问用户信息管理页面。

结论

本文介绍了如何使用 Java 技术实现一个 Java Web 应用登录系统。本文仅仅作为一个入门级的例子,你可以根据你的实际需求来选择适合你的解决方案。