Shiro 作为权限控制框架, 现在因要拓展多服务分布式 ,要求使用 Mysql 作为Seesion 存储解决方案 , 网上90%都是Redis , 关于Mysql的很少而且大多都是错误的, 恳请各位大佬给个思路 , 谢谢~~~
Shiro 作为权限控制框架, 现在因要拓展多服务分布式 ,要求使用 Mysql 作为Seesion 存储解决方案 , 网上90%都是Redis , 关于Mysql的很少而且大多都是错误的, 恳请各位大佬给个思路 , 谢谢~~~
在MySQL中创建一张表,主要包含下面的3个字段
cookie,user_id
用户登录后设置一个cookie
在拦截器中获取浏览器器中的cookie,通过cookie查询表,查询不到user_id,重定向到登录界面
3 回答2.6k 阅读✓ 已解决
3 回答4.1k 阅读✓ 已解决
8 回答3.6k 阅读
4 回答2.8k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
3 回答1.7k 阅读✓ 已解决
创建一个用于存储会话信息的 MySQL 数据库,并创建一个 session 表,用于存储会话 ID 和会话数据。session 表的结构可以如下所示:
实现 SessionDAO 接口,将会话信息存储到 MySQL 数据库中。可以通过 JDBC 或者 ORM 框架(如 MyBatis)来操作 MySQL 数据库。
在 Shiro 配置文件中配置 SessionDAO 实现类和数据源(即 MySQL 数据库连接):
在上面的配置文件中,我们配置了一个 dataSource bean,用于连接 MySQL 数据库;一个 sessionDAO bean,用于存储和读取会话信息;以及一个 sessionManager bean,用于管理会话。
在 Shiro 过滤器链中添加 SessionFilter 过滤器,用于启用分布式会话管理功能。
在上面的配置文件中,我们将 sessionFilter bean 配置为 NoSessionCreationFilter,表示不创建新的会话,而是使用已有的分布式会话。
最后,在 Shiro 的认证和授权操作中,我们可以通过 Subject.getSession() 方法获取当前用户的会话信息,并在需要的地方使用。例如:
在上面的示例中,我们获取当前用户的会话信息,并从中读取 username 属性的值。
总的来说,使用 MySQL 存储分布式会话是一种可行的方案,可以实现多台服务器之间的共享。但是,在实际应用中需要注意数据库的性能和可靠性,以及分布式会话的一致性和安全性等问题。