📅  最后修改于: 2023-12-03 15:31:32.699000             🧑  作者: Mango
Java Web 应用登录系统是一个常见的系统,用于验证用户身份并提供对应的权限。该系统通常会包含登录页面、注册页面、注销页面以及用户信息管理页面。在本文中,我们将介绍如何使用 Java 技术实现一个 Java Web 应用登录系统。
在实现 Java Web 应用登录系统时,我们需要以下技术栈:
首先,我们需要创建一个 Spring Boot 项目。你可以使用你习惯的 IDE 或者使用 Spring Initializr 来创建。
我们需要添加以下依赖:
<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>
我们需要在 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=
我们需要创建一个用户表,用于存储用户的信息。可以使用以下 SQL 语句创建用户表:
CREATE TABLE users(
id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
password VARCHAR(100) NOT NULL
);
我们需要添加用户注册页面,用于用户注册。可以使用 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>
我们需要添加登录页面,用于用户登录。可以使用 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>
我们需要添加注销页面,用于用户注销。可以使用 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>
我们需要添加用户信息管理页面,用于管理用户信息。可以使用 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>
我们需要添加控制器,用于处理登录、注销、注册和用户信息管理请求:
@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";
}
}
我们需要配置 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;
}
}
我们需要创建用户模型和服务,用于管理用户信息。可以使用以下代码:
@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;
}
}
现在,你可以启动你的应用程序,并访问 http://localhost:8080
来访问用户信息管理页面。
本文介绍了如何使用 Java 技术实现一个 Java Web 应用登录系统。本文仅仅作为一个入门级的例子,你可以根据你的实际需求来选择适合你的解决方案。