springmvc+hibnate+mysql实现用户的登入和登出日志
时间: 2023-12-10 11:39:02 浏览: 96
实现用户登录和登出日志的步骤如下:
1. 创建一个 User 实体类,用于保存用户信息,包括用户名、密码等。
2. 创建一个 LoginLog 实体类,用于保存用户登录日志信息,包括登录时间、IP 地址等。
3. 在 Spring MVC 中创建一个 LoginController,用于处理用户登录和登出请求。在登录时,需要验证用户输入的用户名和密码是否正确,并记录登录日志;在登出时,记录登出日志。
4. 在 Hibernate 中创建 User 和 LoginLog 的数据表,并配置 Hibernate 的映射关系。
5. 在 MySQL 中创建 User 和 LoginLog 的数据表,并配置数据库连接信息。
6. 在 Spring MVC 的配置文件中配置 Hibernate 和数据库连接信息。
7. 在 LoginController 中使用 Hibernate 实现用户登录和登出操作,并保存登录和登出日志。
具体实现细节可以参考以下代码:
User.java:
```
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(name = "username")
private String username;
@Column(name = "password")
private String password;
// getters and setters
}
```
LoginLog.java:
```
@Entity
@Table(name = "login_log")
public class LoginLog {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(name = "login_time")
private Date loginTime;
@Column(name = "ip_address")
private String ipAddress;
// getters and setters
}
```
LoginController.java:
```
@Controller
@RequestMapping("/user")
public class LoginController {
@Autowired
private UserDao userDao;
@Autowired
private LoginLogDao loginLogDao;
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login(@RequestParam("username") String username,
@RequestParam("password") String password,
HttpSession session,
HttpServletRequest request) {
User user = userDao.findUserByUsernameAndPassword(username, password);
if (user == null) {
// 用户名或密码错误,返回登录页面
return "login";
} else {
// 记录登录日志
LoginLog loginLog = new LoginLog();
loginLog.setLoginTime(new Date());
loginLog.setIpAddress(request.getRemoteAddr());
loginLogDao.save(loginLog);
// 将用户信息保存到 session 中
session.setAttribute("user", user);
// 跳转到首页
return "index";
}
}
@RequestMapping(value = "/logout", method = RequestMethod.GET)
public String logout(HttpSession session,
HttpServletRequest request) {
// 获取当前登录用户
User user = (User) session.getAttribute("user");
if (user != null) {
// 记录登出日志
LoginLog loginLog = new LoginLog();
loginLog.setLoginTime(new Date());
loginLog.setIpAddress(request.getRemoteAddr());
loginLogDao.save(loginLog);
// 清空 session
session.invalidate();
}
// 跳转到登录页面
return "login";
}
}
```
UserDao.java:
```
public interface UserDao {
User findUserByUsernameAndPassword(String username, String password);
}
```
UserDaoImpl.java:
```
@Repository
public class UserDaoImpl implements UserDao {
@Autowired
private SessionFactory sessionFactory;
@Override
public User findUserByUsernameAndPassword(String username, String password) {
Session session = sessionFactory.getCurrentSession();
Query query = session.createQuery("from User where username = :username and password = :password");
query.setParameter("username", username);
query.setParameter("password", password);
List<User> users = query.list();
if (users.isEmpty()) {
return null;
} else {
return users.get(0);
}
}
}
```
LoginLogDao.java:
```
public interface LoginLogDao {
void save(LoginLog loginLog);
}
```
LoginLogDaoImpl.java:
```
@Repository
public class LoginLogDaoImpl implements LoginLogDao {
@Autowired
private SessionFactory sessionFactory;
@Override
public void save(LoginLog loginLog) {
Session session = sessionFactory.getCurrentSession();
session.save(loginLog);
}
}
```
在 Spring MVC 的配置文件中配置 Hibernate 和数据库连接信息:
```
<!-- Hibernate 配置 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan" value="com.example.model" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
<!-- 数据源配置 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/test" />
<property name="username" value="root" />
<property name="password" value="123456" />
</bean>
```
其中,test 是数据库名,root 和 123456 分别是 MySQL 的用户名和密码。
最后,在 MySQL 中创建 User 和 LoginLog 的数据表:
```
CREATE TABLE `user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL,
`password` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `login_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`login_time` datetime NOT NULL,
`ip_address` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
```
以上代码就是一个基于 Spring MVC、Hibernate 和 MySQL 的用户登录和登出日志的实现。
阅读全文